Unescape HTML字符串直到HTML内容

时间:2014-11-04 05:05:30

标签: javascript html regex string

我有一个可以多次转义的HTML字符串。我想写一个函数,在其中我传递一个转义字符串,它返回unescape字符串。转义字符串可能会 n 次转义。

例如,我的转义字符串是: -

%253Cp%253Ebbbbbbbbb%253C/p%253E%3Cinput%20type%3D%27hidden%27%20id%3D%27grid_7_domType%27%20class%3D%27allDomObjects%27%20datatype%3D%27subpart%27%3E  

如果我第一次看到这个字符串,那么我会得到: -

%3Cp%3Ebbbbbbbbb%3C/p%3E<input type='hidden' id='grid_7_domType' class='allDomObjects' datatype='subpart'>

这也是一个转义字符串。所以现在我再次浏览这个字符串,我得到了原始内容: -

<p>bbbbbbbbb</p><input type='hidden' id='grid_7_domType' class='allDomObjects' datatype='subpart'>

2 个答案:

答案 0 :(得分:2)

您可以继续进行转义,直到您的字符串不再包含任何转义序列,即它不再与/%[0-9A-F]{2}/匹配。

&#13;
&#13;
var s = "%253Cp%253Ebbbbbbbbb%253C/p%253E%3Cinput%20type%3D%27hidden%27%20id%3D%27grid_7_domType%27%20class%3D%27allDomObjects%27%20datatype%3D%27subpart%27%3E";

while (s.match(/%[0-9A-F]{2}/i)) {
    s = unescape(s);
}

alert(s);
&#13;
&#13;
&#13;

可能更好地使用decodeURIComponent代替unescape

答案 1 :(得分:0)

对于想要在Angular 2+中使用此解决方案的人来说,有一个npm包就是为此而生的。

npm install html-escape-unescape

使用这个软件包,它很简单:

{{ someStringToBeUnescaped?times | unescape:'recursive' }}

它将继续取消传递的字符串,直到它不再被取消,你得到HTML。 得到它here

希望它有所帮助。