2

パイロンを使用していますが、一部の URL に次のような英語以外の文字が含まれています。

http://localhost:5000/article/111/文章标题

ほとんどの場合、問題にはなりませんが、私のログイン モジュールでは、ユーザーがログアウトした後、refererから を取得してrequest.headers、その URL にリダイレクトしようとします。

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

残念ながら、URL に英語以外の文字が含まれていて、IE のブラウザを使用している場合、次のようなエラーが報告されます (Firefox は問題ありません)。

  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()。リダイレクトする前に URL を変換するために使用します。

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

ブラウザーが IE の場合にのみ機能し、非常に退屈なので、これは良い解決策ではありません。良い解決策はありますか?

4

3 に答える 3

1

最後に、私はまだ良い解決策を見つけられず、次のコードを使用します:

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

今はうまくいっているようですが、安心できません。

于 2010-09-02T09:16:27.990 に答える
1

ASCII 以外の URL については、RFC を確認してください。私の記憶が正しければ、それらは同等のASCIIに変換されます。その後、それにリダイレクトできます。

編集: @ssokolov によると (以下のコメントを参照):

検索する特定の用語は、IDN (国際化ドメイン名) と Punycodeです。

于 2010-09-02T06:51:22.103 に答える
0

リダイレクトは、例外を発生させることによって機能します。これをキャッチして HTTP レスポンスに変換する レスポンスの文字セットを指定してみてはいかがでしょうか。

response.charset = 'utf8'

于 2010-09-02T05:57:51.033 に答える