Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何重定向到包含非英语字符的url?_Python_Url_Pylons_Non English_Webob - Fatal编程技术网

Python 如何重定向到包含非英语字符的url?

Python 如何重定向到包含非英语字符的url?,python,url,pylons,non-english,webob,Python,Url,Pylons,Non English,Webob,我正在使用挂架,我的一些URL包含非英语字符,例如: http://localhost:5000/article/111/文章标题 在大多数情况下,这不会是一个问题,但在我的登录模块中,在用户注销后,我尝试从请求.headers中获取引用者,并重定向到该url if user_logout: referer = request.headers.get('referer', '/') redirect(referer) 不幸的是,如果url包含非英语字符,并且浏览器为IE,则会

我正在使用挂架,我的一些URL包含非英语字符,例如:

http://localhost:5000/article/111/文章标题
在大多数情况下,这不会是一个问题,但在我的登录模块中,在用户注销后,我尝试从
请求.headers
中获取
引用者
,并重定向到该url

if user_logout:
    referer = request.headers.get('referer', '/')
    redirect(referer)
不幸的是,如果url包含非英语字符,并且浏览器为IE,则会报告此类错误(Firefox可以):

有一种方法可以修复它(但效果不佳),在重定向之前使用
urllib.quote()
转换url

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

这不是一个好的解决方案,因为它只适用于浏览器是IE的情况,而且非常无聊。有什么好办法吗

重定向通过引发异常来工作。这将被捕获并转换为HTTP响应 为您的响应指定字符集如何


response.charset='utf8'

尝试检查RFC中的非ascii URL。如果我没记错的话,它们被转换成ascii等价物。然后你可以重定向到那个

根据@ssokolov编辑:(见以下评论):


要查找的具体术语是IDN ()及


最后,我仍然没有找到一个好的解决方案,并使用以下代码:

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

现在它似乎工作正常,但我觉得不安全。

坏消息是:我设置了
响应。charset='utf8'
,甚至
请求。charset='utf8'
这意味着url本身没有正确编码。您提供的修复程序可以扩展。referer=quote_plus(url.encode('utf8'))这应该对非字符进行编码,然后对url进行引用。这可以进行转换:referer=quote_路径(url)要查找的特定术语是IDN(国际化域名)和Punycode。这是正确的方法,您应该对url中的每个非ASCII字符进行编码。它在HTTP规范中。
referer = urllib.quote(referer, '.:/?=;-%#')