Django - URL 模式正则表达式不匹配带重音的字符串参数

2024-03-03

我在将带重音符号的字符串参数传递到 Django 应用程序时遇到一些问题。我有以下网址模式:

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”不会破坏匹配)。

如何更改正则表达式以将参数与编码字符匹配?

谢谢


Use %c3%a9代替%e9在网址中。正则表达式没有失败...Django 甚至没有访问 urlconf。检查日志,您可能会收到 400 错误。

URI 路径应仅包含 UTF-8 编码的字符。任何无法表示为普通可打印 ASCII 字符(且不在保留列表中)的 UTF-8 字符都应采用百分比编码。

é(U+00E9) 是 UTF-8 中的多字节字符:0xc3a9。百分比编码形式为%C3%A9。单字节 0xe9 不是有效的 UTF-8 字符。

See RFC 3986 https://www.rfc-editor.org/rfc/rfc3986#section-3.3.

[\w|\W]+成功匹配包含以下内容的 URL%C3%A9。 Django 似乎将 URL 字节字符串百分比解码为 Unicode 字符串,然后将其转换为 UTF-8 以进行 urlconf 匹配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - URL 模式正则表达式不匹配带重音的字符串参数 的相关文章