Enkodkan Parameter URL dengan Peratusan Pengekodan dalam Python
Apabila peratus pengekodan parameter URL untuk mengelakkan ralat dan memastikan penormalan yang betul, terbina- dalam fungsi urllib.quote() boleh gagal.
Pengecilan Pengekodan Lalai:
Menggunakan urllib.quote() seperti berikut:
url = "http://example.com?p=" + urllib.quote(query)
Mengabaikan pengekodan aksara penting seperti / kepada /, yang menyebabkan masalah dengan penormalan OAuth.
Kekurangan Sokongan Unikod:
Selain itu, ia gagal mengendalikan rentetan Unicode, mengakibatkan pengecualian apabila cuba mengekod aksara bukan ASCII.
Pengekodan yang dipertingkatkan dengan urllib.parse.quote() dan Parameter selamat:
Untuk menangani had ini, gunakan urllib. parse.quote() daripada Python 3, yang menyediakan penyelesaian:
urllib.parse.quote(string, safe='/', encoding=None, errors=None)
Parameter selamat menjadi lalai kepada '/', tetapi menyatakan rentetan kosong menyahdayakan pengecualian aksara ASCII tambahan, dengan itu memastikan pengekodan yang betul bagi /:
urllib.parse.quote('/test', safe='') # Encodes '/' to '%2F'
Membetulkan Pengendalian Unikod dalam Python 2:
Dalam Python 2, terdapat pepijat pengendalian Unikod dengan urllib.quote(). Untuk mengatasinya, mengekod rentetan secara manual sebagai UTF-8 sebelum menggunakan pengekodan peratus:
query = urllib.quote(u"Müller".encode('utf8')) print urllib.unquote(query).decode('utf8') # Outputs: Müller
Alternatif: urllib.urlencode()
Untuk pendekatan yang lebih mudah, pertimbangkan untuk menggunakan urllib.urlencode(), yang mengendalikan pengekodan peratus dan Unicode secara automatik:
encoded_params = urllib.urlencode({'p': query}) # Properly encodes '/' and supports Unicode
Atas ialah kandungan terperinci Cara Mengekodkan Parameter URL dengan Betul dalam Python: Menangani Had `urllib.quote()` dan `urllib.urlencode()`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!