【问题标题】:Remove all html tags except <img> or <img/> tags with javascript使用 javascript 删除除 <img> 或 <img/> 标记之外的所有 html 标记
【发布时间】:2016-05-13 19:58:54
【问题描述】:

我有一个 JS 字符串,我想防止在我的网站消息输入中注入 html 和 js。

如何从字符串中删除除 img 标记之外的所有 HTML 标记,因为它用于显示这样的表情符号:

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

我正在使用以下代码删除所有 html 标签,但它仅适用于 &lt;br&gt; 标签而不适用于 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 标签,要么简单地将它们显示为简单的文本,例如: &lt;script&gt; alert("hi");&lt;/script&gt;

&lt;img&gt; 标签除外。

【问题讨论】:

  • 请在 google 上搜索 javascript 中的正则表达式
  • 坏消息:你仍然可以注入带有图像标签的脚本!

标签: javascript jquery html tags


【解决方案1】:

你可以使用 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

【讨论】:

  • 值得注意的是,这里执行jQuery实际上会运行html的内容!试试&lt;img src=x onerror=alert("Test")&gt;
  • 我试过了,这对我不起作用..它根本不打印任何东西。甚至不是纯文本。
【解决方案2】:

你可以使用这个简单的代码

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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2012-01-10
    • 2017-04-23
    • 2011-06-05
    相关资源
    最近更新 更多