Rod*_*igo 8 javascript encoding escaping
我有一个Web服务,接收来自不同客户端的数据.其中一些发送使用escape()编码的数据,而其他人使用encodeURIComponent().有没有办法检测用于转义数据的编码?
mik*_*ika 12
这对服务器端没有帮助,但在客户端,我使用了javascript异常来检测url编码是否产生了ISO Latin或UTF8编码.
decodeURIComponent 在无效的UTF8序列上抛出异常.
try {
result = decodeURIComponent(string);
}
catch (e) {
result = unescape(string);
}
Run Code Online (Sandbox Code Playgroud)
例如,ISO Latin编码的变音符号'ä' %E4将在Firefox中引发异常,但UTF8编码的'ä' %C3%A4不会.
Dej*_*vić 10
我意识到这是一个老问题,但我不知道更好的解决方案.所以我这样做(感谢上面RobertPitt的评论):
function isEncoded(str) {
return typeof str == "string" && decodeURIComponent(str) !== str;
}
Run Code Online (Sandbox Code Playgroud)
我还没有遇到过这种失败的情况.这并不意味着案件不存在.也许有人可以对此有所了解.
鼓励您的客户使用encodeURIComponent().请参阅此页面以获得解释: 比较escape(),encodeURI()和encodeURIComponent().如果你真的想要确切地弄清楚某些东西是如何被编码的,你可以尝试寻找一些escape()和encodeURI()不编码的字符.