为什么 JavaScript 函数encodeURIComponent将空格编码为十六进制 Unicode 值%20而不是+. URI 参数不应该是空格吗+


空格编码为 %20,我相信那是他们的 ASCII 字符代码。

但是,开发人员对将空格编码为 + 很感兴趣,因为它生成的 URL 可被人类阅读和输入。


在所有使用 URI 的情况下,+ 都不会被识别为空格,例如尝试使用此链接:-

mailto:bloke@somewhere?subject=你好+世界

主题行仍然有 + 而:-

mailto:bloke@somewhere?subject=Hello%20World

作品。


作为一般规则,文件路径应将空格编码为 %20。查询字符串参数应将空格编码为 +。

例如: http: //www.example.com/a%20file.ext?name=John +Doe


使用 + 号作为空格是出于历史原因。那时的 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

对于大多数用例,+ 号的含义类似于参数值中的项目或术语分隔符。这正是我今天推荐使用它的领域。


微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部