GET参数中允许哪些字符而不编码或转义它们?我的意思是这样的:
http://www.example.org/page.php?name=XYZ
你有什么可以而不是XYZ?我认为只有以下字符:
这是完整列表还是允许其他字符?
我希望你能帮助我.提前致谢!
此问题涉及URL的查询字符串部分中的?字符,这些字符出现在标记字符之后.
根据维基百科,某些字符保持原样,其他字符编码(通常带有%转义序列).
我一直试图将其跟踪到实际规格,以便我理解维基百科页面中每个要点背后的理由.
矛盾例1:
在HTML规范说来编码空间,+并按照其余RFC1738.但是,这个RFC说这~是不安全的,而且"[a] ll不安全的字符必须始终在URL中编码".这似乎与维基百科相矛盾.
实际上,IE8 ~在它生成的查询字符串中进行编码,而FF3则按原样进行编码.
矛盾示例2:
维基百科指出,它未提及的所有字符都必须进行编码.!在维基百科中没有提到.但是RFC1738声明这!是一个"特殊"字符并且"可以使用未编码的".这似乎与维基百科相矛盾,维基百科说它必须编码.
实际上,IE8 !在它生成的查询字符串中进行编码,而FF3则按原样进行编码.
据我所知,这可能是为了对那些在维基百科和规范之间存在疑问的字符进行编码.甚至可能编码所有不是[A-Za-z0-9]的东西.我想知道这方面的实际标准.
结论
维基百科上描述的算法精确编码那些不是RFC3986非保留字符的字符.也就是说,它编码除字母数字和字母之外的所有字符-._~.作为一种特殊情况,空间被编码为+而不是%20RFC3986.
某些应用程序使用较旧的RFC.为了比较,RFC2396无保留字符是字母数字和!'()*-._~.
为了比较,HTML5工作草案算法编码除字母数字和字母以外的所有字符*-._.空间的特殊情况编码仍然存在+.值得注意的差异*是未编码和~编码.(从技术上讲,这种处理*与RFC3986是兼容的,即使它*是在reserved因为它sub-delims在query生产中允许的范围内.)