ホームページ  >  記事  >  バックエンド開発  >  Python で URL パラメータを適切にエンコードする方法: `urllib.quote()` および `urllib.urlencode()` の制限に対処する

Python で URL パラメータを適切にエンコードする方法: `urllib.quote()` および `urllib.urlencode()` の制限に対処する

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 03:28:03191ブラウズ

How to Properly Encode URL Parameters in Python:  Addressing Limitations of `urllib.quote()` and `urllib.urlencode()`

Python でパーセントエンコーディングを使用して URL パラメータをエンコードする

エラーを防止し、適切な正規化を確保するために URL パラメータをパーセントエンコーディングする場合、ビルドされたurllib.quote() 関数では不十分な場合があります。

デフォルトのエンコーディングの省略:

次のように urllib.quote() を使用します:

url = "http://example.com?p=" + urllib.quote(query)

/ から / へのエンコードを省略するため、OAuth 正規化で問題が発生します。

Unicode サポートの欠陥:

さらに、Unicode 文字列の処理に失敗し、次のようなエラーが発生します。非 ASCII 文字をエンコードしようとすると例外が発生します。

urllib.parse.quote() と安全なパラメータによるエンコーディングの改善:

これらの制限に対処するには、urllib を利用します。 Python 3 の parse.quote() は、解決策を提供します。

urllib.parse.quote(string, safe='/', encoding=None, errors=None)

安全なパラメーターのデフォルトは「/」ですが、空の文字列を指定すると、追加の ASCII 文字の除外が無効になり、/ の適切なエンコードが保証されます。

urllib.parse.quote('/test', safe='') # Encodes '/' to '%2F'

Python 2 での Unicode 処理の修正:

Python 2 では、urllib.quote() に Unicode 処理のバグがありました。これを回避するには、パーセント エンコーディングを適用する前に文字列を UTF-8 として手動でエンコードします。

query = urllib.quote(u"Müller".encode('utf8'))
print urllib.unquote(query).decode('utf8') # Outputs: Müller

代替: urllib.urlencode()

より単純なアプローチとして、パーセント エンコーディングと Unicode の両方を自動的に処理する urllib.urlencode() の使用を検討してください。

encoded_params = urllib.urlencode({'p': query}) # Properly encodes '/' and supports Unicode

以上がPython で URL パラメータを適切にエンコードする方法: `urllib.quote()` および `urllib.urlencode()` の制限に対処するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。