Я использую пилоны, и некоторые из моих URL-адресов содержит не английские символы, такие как:Как перенаправить URL-адрес с неанглийскими символами?
http://localhost:5000/article/111/文章标题
В большинстве случаев, это не будет проблемой, но в моем модуле авторизации, после того, как пользователь вышел из системы, я пытаюсь получить referer
от request.headers
и перенаправить на этот URL.
if user_logout:
referer = request.headers.get('referer', '/')
redirect(referer)
Unforunately, если URL содержит не-латинские символы, и с Брауэр ИЭ, он сообщит такую ошибку (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)
Это нехорошее решение, потому что оно работает только в том случае, если brower IE и очень скучно. Есть ли хорошее решение?
Это правильный способ сделать это, вы должны кодировать каждый символ не ASCII в URL. Это в спецификации HTTP. – giolekva