使用javascript encodeURIComponent函数编码空间

时间:2020-03-06 14:25:42  来源:igfitidea点击:

为什么JavaScript函数encodeURIComponent将空格编码为十六进制Unicode值%20,而不是+。 URI参数不应该在+之间加空格吗?

解决方案

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

但是,开发人员大胆地将空格编码为+,因为它生成的URL可以被人类读取和键入。

通常,文件路径应具有编码为%20的空格。查询字符串参数的空格应编码为+。

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

在URI的所有用法中,不能将+识别为空格,例如,尝试使用此链接:-

mailto:bloke @ somewhere?subject = Hello + World

主题行仍带有+,而:-

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

作品。

将+号用作空格是出于历史原因。然后,CGI使Web服务器能够将常规命令行程序用作" Web应用程序"。在命令行程序的脚本世界中,大多数解释器/ 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

对于大多数用例,+符号的含义将是参数值中的项或者项分隔符。这就是我今天建议使用的区域。