2

当我在工作中处理一些奇怪的 JavaScript 代码时,我发现了这个:

string = decodeURIComponent(encodeURIComponent(string));

在我看来,这段代码没用,我必须删除它。但对于一些非常具体的情况,这可能是一种黑客攻击。谷歌向我展示了该指令存在其他程序。

那么,你知道这是什么结果吗?只是一个字符串的慢速内存副本?

4

1 回答 1

0

单看它,我会说它们相互抵消,返回的字符串是原始输入字符串。除非我错过了什么,否则它没有副作用。

但是,我以前见过这样的代码

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

于 2013-03-12T11:40:42.993 回答