2010-09-02 46 views
1

我使用外掛架,以及一些我的網址中含有非英文字符,如:如何重定向到非英文字符的網址?

http://localhost:5000/article/111/文章標題 

在大多數情況下,它不會是一個問題,但在我的登錄模塊,用戶之後已經註銷,我嘗試從request.headers獲得referer,並重定向到該URL。

if user_logout: 
    referer = request.headers.get('referer', '/') 
    redirect(referer) 

Unforunately,如果URL中含有非英文字符,並與IE的布勞爾,它會報告這樣的錯誤(Firefox是OK):

WebError Traceback: 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5 in position 140: ordinal not in range(128) 
View as: Interactive (full) | Text (full) | XML (full) clear this 
clear this 
URL: http://localhost:5000/users/logout 

Module weberror.evalexception:431 in respond   view 

有辦法解決它(但不好),請使用urllib.quote()在重定向之前轉換網址。

referer = quote_path(url) # only quote the path of the url 
redirect(referer) 

這不是一個好的解決方案,因爲它只適用於瀏覽器是IE瀏覽器,而且非常無聊。有沒有什麼好的解決方案?

回答

0

最後,我還是沒有找到一個好的解決方案,並使用此代碼:

referer = urllib.quote(referer, '.:/?=;-%#') 

現在看起來很好,但我感覺不安全。

+0

這是正確的做法,你應該在URL中編碼每個非ASCII字符。它在HTTP規範中。 – giolekva 2010-09-07 07:11:15

0

重定向通過引發異常工作。這被捕獲並轉換爲HTTP響應 如何指定響應的字符集?

Response.Charset的= 'UTF8'

+0

壞消息是:我已經設置了response.charset ='utf8'',甚至是'request.charset ='utf8'' – Freewind 2010-09-02 06:06:20

+0

這意味着url本身沒有正確編碼。 您提供的修復程序可以進行擴展。 referer = quote_plus(url.encode('utf8')) 這應該enode非字符,然後引用url應該工作。 – pyfunc 2010-09-02 07:18:58

1

嘗試檢查非ASCII網址RFC。如果我沒有記錯的話,它們會被轉換成ASCII等值。你可以重定向到那個。

編輯:根據@ssokolov(見下面的註釋):

具體來看查找是IDN (Internationalized Domain Names)和 Punycode

+0

這是做這種轉換: referer = quote_path(url) – pyfunc 2010-09-02 07:07:17

+1

查詢的具體條款是IDN(國際化域名)和Punycode。 – ssokolow 2010-09-04 21:24:50

相關問題