【问题标题】:php strip_tags: allows <br />?php strip_tags: 允许 <br />?
【发布时间】:2010-09-25 13:24:39
【问题描述】:

如何在 strip_tags() 中允许&lt;br /&gt; 或任何我可以解决的方法?

<?php
$text = '<p>Test <br />paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p>, <a>, <br />
echo strip_tags($text, '<p><a><br />');
echo "\n";

// Allow <br /> only
echo strip_tags($text, '<br />');
?>

结果:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
Test paragraph. Other text

谢谢, 刘

【问题讨论】:

    标签: php tags strip


    【解决方案1】:

    不要使用自闭标签名称? echo strip_tags($text, '&lt;br&gt;');

    strip_tags() 函数的allowable_tags 参数采用&lt;tagname&gt; 形式的允许标记您的代码不起作用的原因是因为您使用&lt;br /&gt; 而不是&lt;br&gt;

    【讨论】:

    • 我认为有效的 br 标签总是自动关闭的!?
    • 仅在 XHTML 中,而不是在 strip_tags 解析的 HTML 中。
    • 对于其他想要允许多个标签的人,您可以像这样添加它们:strip_tags($text, '&lt;br&gt;&lt;p&gt;&lt;b&gt;');
    【解决方案2】:

    strip_tags 并非旨在作为安全措施,将其与allowable_tags 一起使用肯定是不安全的,因为它会让事件处理程序和其他有害属性通过。

    如果您希望允许用户输入一些列入白名单的元素和属性,您需要使用带有适当 HTML 解析器的 HTML 清理库。参见例如HTML purifier

    用户 cmets 通常最好不要让用户控制 HTML 标记,而是接受原始文本,在输出时对其进行 HTML 转义,并进行替换以从文本生成标记(例如:\n -> &lt;br&gt;\n\n -> &lt;/p&gt;&lt;p&gt;,链接检测)。

    【讨论】:

      【解决方案3】:

      标签中也不允许有空格:http://php.net/manual/en/function.strip-tags.php(见第二条注释)

      【讨论】:

        【解决方案4】:

        你可以混合一个或多个标签同时进行条带化。

        string strip_tags ( string $str [, string $allowable_tags ] )
        

        检查文档

        如果您也想剥离新线,解决方案将在剥离之前使用 nl2br

        所以

        echo strip_tags(nl2br($text), '<br>');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-07
          • 2012-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-01
          相关资源
          最近更新 更多