2014-09-29 29 views
0

這裏是我使用逃脫HTML標記代碼:逃生html標籤,除了少數特定標記的

var ne = document.createElement('textarea'); 
ne.appendChild(document.createTextNode(str)); 
return ne.innerHTML; 

我不想逃避<strong></strong> <i></i>標籤

e.g <h1>sasasas<strong>hello</strong></h1>應該&lt;h1&gt;sasasas<strong>hello</strong>&lt;/h1&gt;

如何我可以那樣做嗎?

+0

可能檢查'

'

'''和''並在你轉義html之前用它們各自的字符串替換它們? – starvator 2014-09-29 19:00:15

回答

0
var ne = document.createElement('textarea'), 
    str = '<h1>sasasas<strong>hello</strong></h1>'; 
var newstr = str.replace(/(<\/?(\w+)>)/g, function(m0, m1, m2) { 
    if (m2 != 'strong' && m2 != 'i') 
     return m0.replace(/</g, '&lt;') 
       .replace(/>/g, '&gt;'); 
    else 
     return m0; 
}); 
ne.appendChild(document.createTextNode(newstr)); 
return ne.innerHTML; 

它適用於簡單的標籤(沒有屬性 - 我不知道您的文本的來源)。 或者,因爲它是在評論說,這樣的事情:

var ne = document.createElement('textarea'), 
    str = '<h1>sasasas<strong>hello</strong></h1>'; 
var newstr = str.replace(/(<(\/?(strong|i))>)/gi, 'BRA$2KET') 
       .replace(/</g, '&lt;') 
       .replace(/>/g, '&gt;') 
       .replace(/(BRA(\/?(strong|i))KET)/gi, '<$2>'); 
ne.appendChild(document.createTextNode(newstr)); 
return ne.innerHTML; 

或者,最好的辦法,只是恢復逃脫標籤

var ne = document.createElement('textarea'), 
    str = '<h1>sasasas<strong>hello</strong></h1>'; 
var newstr = str.replace(/</g, '&lt;') 
       .replace(/>/g, '&gt;') 
       .replace(/(&lt;(\/?(strong|i))&gt;)/gi, '<$2>'); 
ne.appendChild(document.createTextNode(newstr)); 
return ne.innerHTML;