2014-11-04 56 views
1

我有一个HTML字符串,可能会被多次转义。我想写一个函数,其中我传递一个转义字符串,并返回unescape字符串。转义的字符串可能会被转义n次。Unescape HTML字符串,直到HTML内容

例如,我逃脱字符串是: -

%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-9A-F]{2}/

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);

可能更好地使用decodeURIComponent而不是unescape虽然。

+0

是的,但是我们运行循环多少次?我们如何认识到我们获得了未转义的字符串? – 2014-11-04 05:11:18

+0

是的,它的工作。这是否与第n次转义字符串一起工作?而你仍然在使用escape,而不是decodeURIComponenet。那么哪一个太好用了? – 2014-11-04 05:21:22

+0

是的,它会使用* n *次转义字符串。我只是把'unescape',因为我认为那是你正在使用的。我会推荐使用'decodeURIComponent'。 – 2014-11-04 05:22:41

0

对于想要在Angular 2+中使用这个解决方案的人们来说,这里有一个npm包。

npm install html-escape-unescape 

使用此数据包,这是简单的:

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

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

希望它可以帮助别人。