本文详细解析JavaScript中三种字符串编码函数:escape、encodeURI和encodeURIComponent。重点说明在URL参数传递时应使用encodeURIComponent以确保特殊字符不被截断,整体跳转可使用encodeURI,而局部数据交互可考虑escape。同时列出了各函数保留不编码的字符列表,帮助开发者根据场景选择正确的编码方式。
JavaScript编码函数概述
JavaScript处理字符串编码主要涉及三组对应的函数:编码函数包括escape、encodeURI和encodeURIComponent,解码函数则分别为unescape、decodeURI和decodeURIComponent。
不同场景下的编码策略
在构建包含查询参数的URL时,必须使用encodeURIComponent对参数值进行编码。这样可以防止参数中包含#等特殊字符导致URL被意外截断,确保链接结构的完整性。
具体应用场景如下:
当需要将整个URL进行跳转时,可以使用encodeURI对完整链接进行编码。
例如,执行页面跳转的代码可以写为:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
如果在JavaScript内部处理数据,不涉及URL传输,可以使用escape进行编码。
典型的例子包括在浏览器历史记录(history)中保存收藏信息时使用。
需要注意的是,当escape处理0-255范围之外的Unicode字符时,会输出%u****格式的编码串;而在其他情况下,escape、encodeURI和encodeURIComponent的编码结果是一致的。
实际开发中使用频率最高的是encodeURIComponent。它会将中文、韩文等非ASCII字符转换为UTF-8格式的URL编码。因此,若通过encodeURIComponent向后端传递参数,需确保后端解码逻辑支持UTF-8编码(即Form提交的编码方式与当前页面编码方式保持一致)。
各函数不编码字符列表
关于escape函数,它不会编码以下69个字符:*,+,-,.,/,@,_,0-9,a-z,A-Z。
关于encodeURI函数,它不会编码以下82个字符:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z。
关于encodeURIComponent函数,它不会编码以下71个字符:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z。
关于escape、encodeURI和encodeURIComponent三者区别的详细对比,可参考相关技术文章:javascript 字符 Escape,encodeURI,encodeURIComponent。
以上内容涵盖了JavaScript编码函数的核心知识点,旨在帮助开发者在编程工作中正确选择编码策略。希望这些信息能为您提供帮助,欢迎继续支持本站获取更多技术资源。