虽然强烈建议(W3C source,通过 Wikipedia)让 Web 服务器支持分号作为 URL 查询项的分隔符(除了&符号之外),但它似乎并没有被普遍遵循。
例如比较
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)
虽然我尝试的第一个 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']}
接受分号作为分隔符的现状如何,潜在的问题或一些有趣的注意事项是什么? (从服务端和客户端的角度来看)
最佳答案
W3C Recommendation from 1999已经过时了。目前状态,根据2014 W3C Recommendation , 是分号现在作为参数分隔符非法了吗:
To decode application/x-www-form-urlencoded payloads, the following algorithm should be used. [...] The output of this algorithm is a sorted list of name-value pairs. [...]
- Let strings be the result of strictly splitting the string payload on U+0026 AMPERSAND characters (&).
换句话说,?foo=bar;baz
表示参数foo
的值为bar;baz
;而 ?foo=bar;baz=sna
应该导致 foo
成为 bar;baz=sna
(尽管从第二个 开始在技术上是非法的=
应转义为 %3D
)。
关于http - 分号作为 URL 查询分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481664/