3

アクセント付きの文字列引数を Django アプリケーションに渡すのに問題があります。次の URL パターンがあります。

url(r'^galeria/(?P<page>\d+)/(?P<order>\w+)/(?P<query>[\w|\W]+)', 'possible_brastemp.views.gallery_with_page_and_query'),

次のようなURLを試すと:

 http://127.0.0.1:8000/galeria/1/ultimos/Julian%20Andr%E9s

パターンが一致しません。問題を '%E9' 文字に切り分けました ('%20' は一致を壊しません)。

パラメータをエンコードされた文字と一致させるように正規表現を変更するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

5

%c3%a9URLの代わりに使用%e9します。正規表現は失敗していません... Djangoはurlconfに到達していません。ログを確認すると、おそらく 400 エラーが発生しています。

URI パスには、UTF-8 でエンコードされた文字のみを含める必要があります。通常の印刷可能な ASCII 文字として表すことができない (予約リストにない) UTF-8 文字は、パーセントでエンコードする必要があります。

é(U+00E9) は UTF-8 のマルチバイト文字です: 0xc3a9. パーセントでエンコードされた形式は%C3%A9. 1 バイトの 0xe9 は、有効な UTF-8 文字ではありません。

RFC 3986を参照してください。

[\w|\W]+は、 を含む URL と正常に一致します%C3%A9。Django は、URL バイト文字列を Unicode 文字列にパーセント デコードしてから、urlconf マッチングのために UTF-8 に変換するようです。

于 2012-07-27T21:52:39.227 に答える