Tampermonkey,Chrome,如何将html实体更改回符号?

时间:2017-08-30 13:05:19

标签: javascript google-chrome tampermonkey

有一个网页通过将html代码嵌入到另一个html代码中来混淆html代码,当我尝试用等价符号替换实体时,它只会删除所有内容。

这是我尝试过的代码:

var marks = document.getElementsByTagName("body");
      for(var i = 0, l = marks.length; i < l; i++)
      {
         var mark = marks[i];
         mark.innerHTML = mark.innerHTML.replace('&lt;', '<');
         mark.innerHTML = mark.innerHTML.replace('&gt;', '>');
         mark.innerHTML = mark.innerHTML.replace('&amp;', '&');
      }

但这就是它的作用:https://jsfiddle.net/rkb89odm/2/

1 个答案:

答案 0 :(得分:1)

首先,您只是替换第一次出现,而不是所有出现次数。

> '&lt;html&gt;&lt;body&gt;'.replace('&lt;', '<')
< "<html&gt;&lt;body&gt;"
> '&lt;html&gt;&lt;body&gt;'.replace(/&lt;/g, '<')
< "<html&gt;<body&gt;"
> '&lt;html&gt;&lt;body&gt;'.replace(/&lt;/g, '<').replace(/&gt;/g, '>');
< "<html><body>"

请参阅How to replace all occurrences of a string in JavaScript?

其次,我会避免通过浏览器绕过部分有效的标记,因为当它返回给你时它可能不一样。在将其放回innerHTML之前运行所有替换。

let s = mark.innerHTML;
s = s.replace(/&lt;/g, '<')
s = s.replace(/&gt;/g, '>');
mark.innerHTML = s;