2014-11-04 93 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

希望它可以幫助別人。