我注意到Google没有对网址查询部分中的所有特殊字符进行编码。例如:
Placing this string in Google's search: !@#$%^&*()
Yields this URL: https://www.google.com/#q=!%40%23%24%25^%26*()
请注意,!,^,*,(和)未编码。
某些字符,例如:或<被认为是不安全或保留,但谷歌不编码。
有人可以解释为什么谷歌会这样做,以及他们是否有一个参考文件,确切地说哪些字符被编码而哪些不被编码?
感谢您的帮助!
答案 0 :(得分:1)
记录在案here:
有些字符在没有首先使用的情况下在网址中使用是不安全的 编码。由于Google搜索请求是使用HTTP网址生成的, 搜索请求必须遵循URL约定,包括字符 必要时编码。
HTTP URL语法定义只有字母数字字符,即 特殊字符$ -_。+!*'()和保留字符; /?:@ =&能够 用作HTTP URL请求中的值。自保留 搜索引擎使用字符来解码URL,还有一些 特殊字符用于请求搜索功能,然后全部 用作输入参数值的非字母数字字符必须 是URL编码的。
对字符串进行URL编码:
用“+”字符替换空格字符替换每个字符 非字母数字字符的十六进制ASCII值,在 “%”字符的格式后跟两个十六进制数字。 (这样的 ASCII值可以称为转义码。)
某些输入参数要求传递给Google搜索的值是双URL编码的。此要求意味着您必须连续两次将URL编码应用于字符串以生成最终值。