5

我注意到 Google 不会对 URL 的查询部分中的所有特殊字符进行编码。例如:

Placing this string in Google's search: !@#$%^&*()

Yields this URL: https://www.google.com/#q=!%40%23%24%25^%26*()

请注意,!、^、*、( 和 ) 未编码。

诸如 : 或 < 之类的某些字符被认为是不安全的或保留的,但 Google 不会对它们进行编码。

有人能解释一下为什么谷歌会这样做,如果他们有一个参考文件来说明哪些字符被编码,哪些没有?

谢谢你的帮助!

4

1 回答 1

1

如此处所述

某些字符在未经编码的情况下在 URL 中使用是不安全的。由于 Google 搜索请求是使用 HTTP URL 发出的,因此搜索请求必须遵循 URL 约定,包括必要时的字符编码。

HTTP URL 语法定义只有字母数字字符、特殊字符 $-_.+!*'() 和保留字符 ;/?:@=& 可以用作 HTTP URL 请求中的值。由于搜索引擎使用保留字符来解码 URL,并且使用一些特殊字符来请求搜索功能,因此用作输入参数值的所有非字母数字字符都必须进行 URL 编码。

对字符串进行 URL 编码:

用“+”字符替换空格字符 将每个非字母数字字符替换为其十六进制 ASCII 值,格式为“%”字符后跟两个十六进制数字。(这样的 ASCII 值可以称为转义码。)

某些输入参数要求传递给 Google 搜索的值是双 URL 编码的。此要求意味着您必须连续两次对字符串应用 URL 编码才能生成最终值。

于 2013-10-16T19:45:32.417 回答