2016-05-13 213 views
1

我有一個JS字符串,我想防止在我的網站消息輸入html和js注入。刪除所有html標籤,但<img>或<img/>標籤與javascript

如何從一個字符串中刪除所有的HTML標籤,除了img標籤,因爲它是用來顯示這樣的表情符號:只有

<img class="emo" src="images/emo/smile.png"> 

我使用下面的代碼刪除所有的HTML標籤,但它適用於<br>標記而不是img標記。

function remove_tags(html) 
{ 
    var html = html.replace("<img>","||img||"); 
    var tmp = document.createElement("DIV"); 
    tmp.innerHTML = html; 
    html = tmp.textContent||tmp.innerText; 
    return html.replace("||img||","<img>"); 
} 

要麼刪除那些HTML標記或簡單地顯示它們作爲簡單的文章,如: <script> alert("hi");</script>

但除了<img>標籤。

+0

請搜索在谷歌正則表達式在JavaScript –

+1

壞消息:你仍然可以使用圖像標記注入腳本! – Scott

回答

0

你可以做這樣的使用jQuery:

function remove_tags(html) 
{ 
    var html = html.replace("<img>","||img||"); 
    var text = jQuery(html).text(); 
    return text.replace("||img||","<img>"); 
} 

參考:Strip HTML from Text JavaScript

+0

值得注意的是,在這裏執行'jQuery'會實際運行'html'的內容!嘗試用'' – Scott

+0

我試了一下,這對我來說沒有效果。它根本不打印任何東西。甚至沒有純文本。 – Faizan

1

你可以使用這個簡單的代碼

var html = '<img class="emo" src="images/emo/smile.png">'; 
var text = html.replace(/<.*?>/g, ""); 

replace方法去除字符串中的所有HTML標籤。

您可以測試底部演示中的每個html字符串。

$("button").click(function(){ 
 
    var html = $("textarea").val(); 
 
    var text = html.replace(/<.*?>/g, ""); 
 
    $("textarea").val(text); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea><img src=x onerror=alert("Test") /><p>aa</p></textarea> 
 
<br /> 
 
<button>Remove HTML tags</button>