当我在工作中处理一些奇怪的 JavaScript 代码时,我发现了这个:
string = decodeURIComponent(encodeURIComponent(string));
在我看来,这段代码没用,我必须删除它。但对于一些非常具体的情况,这可能是一种黑客攻击。谷歌向我展示了该指令存在其他程序。
那么,你知道这是什么结果吗?只是一个字符串的慢速内存副本?
当我在工作中处理一些奇怪的 JavaScript 代码时,我发现了这个:
string = decodeURIComponent(encodeURIComponent(string));
在我看来,这段代码没用,我必须删除它。但对于一些非常具体的情况,这可能是一种黑客攻击。谷歌向我展示了该指令存在其他程序。
那么,你知道这是什么结果吗?只是一个字符串的慢速内存副本?
单看它,我会说它们相互抵消,返回的字符串是原始输入字符串。除非我错过了什么,否则它没有副作用。
但是,我以前见过这样的代码
return unescape( encodeURIComponent( s ) );
和
return decodeURIComponent( escape( s ) );
它使用了 encodeURIComponent/decodeURIComponent 与 UTF8 绑定而 escape/unescape 没有绑定的事实。
取消除 UTF-8 编码/解码部分之外的所有部分是一种技巧,这些部分发生在高度优化的浏览器本机代码中,而不是手写的 javascript 代码中。
有关详细说明,请参阅http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html。