JavaScript中encodeURI与encodeURIComponent的区别及应用

作者:小括号

时间:2026-10-29

浏览:355

本文详细解析JavaScript中encodeURI与encodeURIComponent两个函数的核心区别。重点说明encodeURI保留URI特殊字符如?&=,适用于完整URL编码;而encodeURIComponent会转义所有非保留字符,适用于URI组件(如查询参数)编码。通过代码示例展示两者在特殊字符处理上的差异,并指出在Ajax请求中参数传递时正确使用编码函数的注意事项,避免中文或特殊符号丢失。

文章目录

encodeURI与encodeURIComponent基础概念

encodeURI和encodeURIComponent函数均用于JavaScript中对URI进行编码,将相关参数转换为UTF-8编码格式的数据。当URI用于定位跳转时,其中的中文、日文等非ASCII字符会自动进行编码转换。

这两个函数在功能上较为相似,但存在一些关键区别。

encodeURI保留不编码的字符共82个,包括:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z。而encodeURIComponent保留不编码的字符共71个,包括:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z。

常见编码问题与解决方案

常见问题:

ajax.get ( url+'?k1'=v1+'&k2'=v2+'&k3'=v3, ... );

若URL仅使用encodeURI编码,当提交参数包含searchWord = a+b时,特殊字符+可能被错误处理为空格a b。

解决方案:

ajax.post( url, params,....)

其中params为对象形式。

原因:当参数为对象或数组时,组件库会自动执行encodeURIComponent编码;若仅传递字符串,组件库不做处理,导致后端接收到特殊字符时被过滤。

encodeURI函数详解

encodeURI()用法

该函数不对ASCII字母、数字及特定标点符号(- _ . ! ~ * ' ( ) )进行编码。

其目的是对完整URI进行编码,因此对URI中具有特殊含义的ASCII标点符号(;/?:@&=+$,#)不进行转义。

提示:若URI组件中包含分隔符(如?和#),应使用encodeURIComponent()分别对各组件进行编码。

示例:


document.write(encodeURI("http://www.w3school.com.cn")+ "<br />") 
document.write(encodeURI("http://www.w3school.com.cn/My first/")) 
document.write(encodeURI(",/?:@&=+$#")) 
//批注:只转换域名后面的部分,并且对,/?:@&=+$#不处理。 
// http://www.w3school.com.cn 
// http://www.w3school.com.cn/My%20first/ 
// ,/?:@&=+$#  

decodeURI()函数可对encodeURI()编码后的URI进行解码。

encodeURIComponent函数详解

encodeURIComponent()用法

该函数不对ASCII字母、数字及特定标点符号(- _ . ! ~ * ' ( ) )进行编码。

其他字符(如用于分隔URI组件的标点符号:;/?:@&=+$,#)将被替换为一个或多个十六进制转义序列。

提示:请注意encodeURIComponent()与encodeURI()的区别,前者假设参数是URI的一部分(如协议、主机名、路径或查询字符串),因此会转义用于分隔URI各部分的标点符号。

示例:


document.write(encodeURIComponent("http://www.w3school.com.cn")) 
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/")) 
document.write(encodeURIComponent(",/?:@&=+$#")) 
//对比 
// http%3A%2F%2Fwww.w3school.com.cn 
// http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F 
// %2C%2F%3F%3A%40%26%3D%2B%24%23  

decodeURIComponent()函数可对encodeURIComponent()编码后的URI进行解码。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章