为什么 JavaScript 函数encodeURIComponent
将空格编码为十六进制 Unicode 值%20
而不是+
. URI 参数不应该是空格吗+
?
空格编码为 %20,我相信那是他们的 ASCII 字符代码。
但是,开发人员对将空格编码为 + 很感兴趣,因为它生成的 URL 可被人类阅读和输入。
在所有使用 URI 的情况下,+ 都不会被识别为空格,例如尝试使用此链接:-
mailto:bloke@somewhere?subject=你好+世界
主题行仍然有 + 而:-
mailto:bloke@somewhere?subject=Hello%20World
作品。
作为一般规则,文件路径应将空格编码为 %20。查询字符串参数应将空格编码为 +。
使用 + 号作为空格是出于历史原因。那时的 CGI 使网络服务器能够使用普通的命令行程序作为“网络应用程序”。在命令行程序的脚本世界中,大多数解释器/shell 语言都有以空格分隔的值列表,例如
items = (A beautiful world)
foreach( item in $items ) echo "* $item"
从命令行调用这样的“列表渲染应用程序”:
render-list A beautiful world
通过 http 和网络服务器调用相同的“列表呈现应用程序”:
http://testhost/cgi-bin/render-list?A+beautiful+world
对于大多数用例,+ 号的含义类似于参数值中的项目或术语分隔符。这正是我今天推荐使用它的领域。