Tampermonkey,Chrome,如何将 html 实体改回符号?
Tampermonkey, Chrome, how to change html entities back to symbols?
有一个网页将 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('<', '<');
mark.innerHTML = mark.innerHTML.replace('>', '>');
mark.innerHTML = mark.innerHTML.replace('&', '&');
}
但这是它的作用:https://jsfiddle.net/rkb89odm/2/
首先,您只是替换了第一个出现的地方,而不是所有出现的地方。
> '<html><body>'.replace('<', '<')
< "<html><body>"
> '<html><body>'.replace(/</g, '<')
< "<html><body>"
> '<html><body>'.replace(/</g, '<').replace(/>/g, '>');
< "<html><body>"
见How to replace all occurrences of a string in JavaScript?
其次,我会避免通过浏览器来回传递部分有效的标记,因为当它返回给您时可能不一样。 运行 将其放回 innerHTML 之前的所有替换。
let s = mark.innerHTML;
s = s.replace(/</g, '<')
s = s.replace(/>/g, '>');
mark.innerHTML = s;
有一个网页将 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('<', '<');
mark.innerHTML = mark.innerHTML.replace('>', '>');
mark.innerHTML = mark.innerHTML.replace('&', '&');
}
但这是它的作用:https://jsfiddle.net/rkb89odm/2/
首先,您只是替换了第一个出现的地方,而不是所有出现的地方。
> '<html><body>'.replace('<', '<')
< "<html><body>"
> '<html><body>'.replace(/</g, '<')
< "<html><body>"
> '<html><body>'.replace(/</g, '<').replace(/>/g, '>');
< "<html><body>"
见How to replace all occurrences of a string in JavaScript?
其次,我会避免通过浏览器来回传递部分有效的标记,因为当它返回给您时可能不一样。 运行 将其放回 innerHTML 之前的所有替换。
let s = mark.innerHTML;
s = s.replace(/</g, '<')
s = s.replace(/>/g, '>');
mark.innerHTML = s;