2016-05-13 283 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>