虽然强烈推荐(W3C 源代码 http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2, via 维基百科 http://en.wikipedia.org/wiki/Query_string#Structure)让 Web 服务器支持分号作为 URL 查询项的分隔符(除了 & 符号之外)(在撰写本文时,不再支持,通过维基百科 http://en.wikipedia.org/wiki/Query_string#Structure),似乎没有被普遍遵循。
例如,比较
http://www.google.com/search?q=nemo;oe=utf-8 http://www.google.com/search?q=nemo;oe=utf-8
结果。 (在后一种情况下,分号是,或在撰写本文时,被视为普通字符串字符,就好像 url 是:http://www.google.com/search?q=nemo%3Boe=utf-8 http://www.google.com/search?q=nemo%3Boe=utf-8)
尽管我尝试过的第一个 URL 解析库表现良好:
>>> from urlparse import urlparse, query_qs
>>> url = 'http://www.google.com/search?q=nemo;oe=utf-8'
>>> parse_qs(urlparse(url).query)
{'q': ['nemo'], 'oe': ['utf-8']}
接受分号作为分隔符的现状如何,有哪些潜在问题或一些有趣的注释? (从服务器和客户端的角度来看)
The 1999 年 W3C 推荐 http://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.2.2已经过时了。根据目前的状况,2014 W3C 推荐 https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#url-encoded-form-data, 现在分号是illegal作为参数分隔符:
要解码 application/x-www-form-urlencoded 有效负载,应使用以下算法。 [...] 该算法的输出是名称-值对的排序列表。 [...]
- 令字符串为按 U+0026 与字符 (&) 严格分割字符串有效负载的结果。
换句话说,?foo=bar;baz
表示参数foo
将会有价值bar;baz
;然而?foo=bar;baz=sna
应该导致foo
being bar;baz=sna
(尽管自第二次以来技术上是非法的=
应该转义到%3D
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)