4 回答
TA贡献1802条经验 获得超5个赞
encodeURIComponent不编码-_.!~*'(),导致在XML字符串中将数据提交给php时出现问题。
例如:
<xml><text x="100" y="150" value="It's a value with single quote" />
</xml>
一般逃逸encodeURI
%3Cxml%3E%3Ctext%20x=%22100%22%20y=%22150%22%20value=%22It's%20a%20value%20with%20single%20quote%22%20/%3E%20%3C/xml%3E
您可以看到,单引号没有编码。为了解决问题,我创建了两个函数来解决项目中的问题,用于编码URL:
function encodeData(s:String):String{
return encodeURIComponent(s).replace(/\-/g, "%2D").replace(/\_/g, "%5F").replace(/\./g, "%2E").replace(/\!/g, "%21").replace(/\~/g, "%7E").replace(/\*/g, "%2A").replace(/\'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29");
}
对于解码URL:
function decodeData(s:String):String{
try{
return decodeURIComponent(s.replace(/\%2D/g, "-").replace(/\%5F/g, "_").replace(/\%2E/g, ".").replace(/\%21/g, "!").replace(/\%7E/g, "~").replace(/\%2A/g, "*").replace(/\%27/g, "'").replace(/\%28/g, "(").replace(/\%29/g, ")"));
}catch (e:Error) {
}
return "";
}
TA贡献1874条经验 获得超12个赞
.之间的区别encodeURI()和encodeURIComponent()这11个字符是由encodeURIComponent编码的,而不是由encodeURI编码的:

我很容易地生成了这个表控制台表在GoogleChrome中使用以下代码:
var arr = [];
for(var i=0;i<256;i++) {
var char=String.fromCharCode(i);
if(encodeURI(char)!==encodeURIComponent(char)) {
arr.push({
character:char,
encodeURI:encodeURI(char),
encodeURIComponent:encodeURIComponent(char)
});
}
}
console.table(arr);
添加回答
举报
