Javascript 为什么unescape可以工作而decodeURI不能';T
我有以下变量:Javascript 为什么unescape可以工作而decodeURI不能';T,javascript,Javascript,我有以下变量: var string="Mazatl%E1n"; 服务器返回的字符串与此类似。我只想把它解码成:Mazatlán。我尝试了以下方法: var string="Mazatl%E1n"; alert(unescape(string)); alert(decodeURI(string)); unescape工作正常,但我不想使用它,因为我知道它是,相反,我尝试decodeURI wich失败,出现以下错误: 未捕获的URI错误:URI格式错误 为什么??感谢您的帮助 var s
var string="Mazatl%E1n";
服务器返回的字符串与此类似。我只想把它解码成:Mazatlán
。我尝试了以下方法:
var string="Mazatl%E1n";
alert(unescape(string));
alert(decodeURI(string));
unescape工作正常,但我不想使用它,因为我知道它是,相反,我尝试decodeURI wich失败,出现以下错误:
未捕获的URI错误:URI格式错误
为什么??感谢您的帮助
var string=“Mazatl%E1n”;
警报(unescape(字符串));
警报(解码URI(字符串))代码>函数需要一个有效的URI作为其参数。如果您只是尝试解码字符串而不是完整的URI,请使用URI支持ASCII字符集,的正确格式编码是%C3%A1
(UTF-8编码)
和unescape使用十六进制转义序列
(这是不同的……)
因此,您从服务器获取的值已使用escape(string)
进行了编码,因为%E1
是Unicode编码,但decodeURI()
需要UTF-8
您必须创建自己的unescape函数,例如:
函数UnicodeCape(字符串){
返回字符串.replace(/%u([\dA-Z]{4})|%([\dA-Z]{2})/g,函数(Z,m1,m2){
返回字符串.fromCharCode(parseInt(“0x”+(m1 | | m2));
})
}
var string=“Mazatl%E1n”;
document.body.innerHTML=unicodeUnEscape(字符串)代码>查找…escape()
和unescape()
是为ISO字符串定义的decodeURI()
和encodeURI()
是为UTF-8字符串定义的。@JohanKarlsson的方向正确。%E1是Unicode编码,但URI使用UTF-8,因此正确的编码是%C3%A1。通过运行encodeURIComponent(“Mazatlán”)
可以看到这一点。您是否可以记录正则表达式?它匹配一个%
,后跟u
和4个十六进制数字,或者%
后跟2个十六进制数字:我建议@johankarsson在正则表达式的g后面添加一个I(不敏感),因为%2f和%2f都是有效的编码