2013-02-06 10 views
10

私はDjangoのurlencodeフィルタはデフォルトでスラッシュをコードしないことを参照してください。Djangoの `urlencode`がスラッシュをエンコードしないのはなぜですか?

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

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

+0

いくつかの使用例を見てみましょう。 –

+1

この記事を読むhttp://stackoverflow.com/questions/1957115/is-a-slash-equivalent-to-an-encoded-slash-2f-in-the-path-portion-of-a – catherine

答えて

7

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

のでurlencodeはPythonのurllib.quoteと同じデフォルト値を使用している、とurllib.quoteはスラッシュをエスケープしないという理由はdocumentationで見つけることができます:

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

その理由は、パスがエスケープされ、'/'はパス内で完全に予想され、有効な文字です。

関連する問題