2012-07-27 33 views
3

我有一些麻煩,將字符串參數與重音傳遞給我的Django應用程序。我有以下URL模式:Django - Url模式正則表達式不匹配字符串參數與口音

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

當我試着像一個網址:

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

模式不匹配。我已將問題隔離爲'%E9'字符('%20'不會中斷匹配)。

如何更改正則表達式以使參數與編碼字符匹配?

謝謝

回答

4

在URL中使用%c3%a9而不是%e9。正則表達式並不失敗...... Django甚至沒有進入urlconf。檢查日誌,你可能會得到400錯誤。

URI路徑只能包含UTF-8編碼的字符。任何不能表示爲普通的,可打印的ASCII字符(並且不在保留列表中)的UTF-8字符應該使用百分比編碼。

é(U + 00E9)是UTF-8中的多字節字符:0xc3a9。百分比編碼形式將是%C3%A9。單字節0xe9不是有效的UTF-8字符。

請參閱RFC 3986

[\w|\W]+成功匹配包含%C3%A9的網址。 Django似乎將URL字符串解碼爲一個Unicode字符串,然後將其轉換爲UTF-8以進行urlconf匹配。