13

Django のurlencodeフィルターはデフォルトでスラッシュをエンコードしていないことがわかります。

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode

スラッシュをエンコードできることは知っていますが、デフォルトでエンコードしないのはなぜですか? スラッシュが URL の予約文字であることを考えると、スラッシュをエンコードすることは受け入れられる動作ではないでしょうか?

4

2 に答える 2

10

Djangoソースから、基本的にDjangoのユーティリティメソッドurlencodeのラッパーです。urlquoteソースのコメントから、urlquoteのUTF-8セーフバージョンですurllib.quote

したがってurlencode、Pythonと同じデフォルトを使用しており、スラッシュをエスケープしないurllib.quote理由はドキュメントに記載されています。urllib.quote

%xxエスケープを使用して、文字列内の特殊文字を置き換えます。文字、数字、および文字「_.-」は引用符で囲まれません。デフォルトでは、この関数はURLのパスセクションを引用することを目的としています。オプションのsafeパラメーターは、引用符で囲むべきではない追加の文字を指定します—そのデフォルト値は「/」です。

したがって、その理由は、パスをエスケープしていて、パス'/'内で完全に期待され、有効な文字であるためです。

于 2013-02-06T04:52:56.960 に答える
1

Django テンプレートでurlencodeもエスケープするには、 を使用します。/{{ variable|urlencode:'' }}

説明: 追加のオプションのパラメーターはurlencode、「安全」な文字セットを示します。デフォルトは です'/'。したがって、空の文字列を渡すと、安全urlencode/はなく、エンコードする必要があることがわかります。

于 2021-07-03T12:15:03.247 に答える