【问题标题】:How to remove all HTML tag exclude some tags [duplicate]如何删除所有HTML标签排除一些标签[重复]
【发布时间】:2013-04-28 03:15:46
【问题描述】:

我创建了一个表单,我想使用 PHP 删除 所有 HTML 标签,但 排除一些标签 (<b>, <strong>, <em>, <i>, <p>, <br>, <ul>, <li> <ol>...(以及一些用于格式段落的标签)当成员点击提交之前,它将被插入到数据库中。

$content = $_POST['content'];

感谢大家的帮助。
如果我的英语不好,我很抱歉。

【问题讨论】:

    标签: php html tags removeall


    【解决方案1】:

    以下应该这样做:

    // tags separated by vertical bar
    $strip_tags = "a|strong|em";
    
    // target html
    $html = '<em><a><b>ha<a href="" title="">d</a>f</em></b>';
    
    // Regex is loose and works for closing/opening tags across multiple lines and
    // is case-insensitive
    // note: The *? makes the matching non-greedy
    $clean_html = preg_replace("#<\s*\/?(".$strip_tags.")\s*[^>]*?>#im", '', $html);
    
    // prints "<b>hadf</b>";
    echo $html;
    

    【讨论】:

      【解决方案2】:

      使用strip_tags() 可能很危险,因为它不会查看 HTML 属性。因此,恶意用户可以将其用于跨站脚本 (XSS) 和其他攻击(正如我对 David Chen 的评论中所指出的那样)。

      相反,我建议使用现有的 HTML 过滤器,例如 http://htmlpurifier.org/,它可能更安全且适合此任务。

      【讨论】:

        【解决方案3】:

        这是你要找的吗?

        $content=strip_tags($content,"<b><strong><em><i><p><br><ul><li><ol>");
        

        【讨论】:

        • 是的,行得通。但是,strip_tags() 不会查看 HTML 属性。因此,恶意用户可以将其用于跨站脚本 (XSS) 和其他攻击。
        • 非常真实!我也知道 strip_tags 只会去除有效标签,而嵌套也可能会搞砸。 (例如你好)
        猜你喜欢
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 2015-10-09
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 2010-12-14
        • 2011-10-30
        相关资源
        最近更新 更多