【问题标题】:PHP: How to strip HTML tag while allowing < and >PHP:如何在允许 < 和 > 的同时去除 HTML 标签
【发布时间】:2010-01-03 22:57:17
【问题描述】:

问题:如何使用 PHP 去除 HTML 标签但允许大于和小于号?

如果我使用 PHP 的 strip_tags() 函数,它就不太行了:

$string = '<p>if A > B</p>'
echo strip_tags($string);  // if A B
// but I want to output "if A > B"

更新

基本上,我只想允许/显示纯文本。

【问题讨论】:

  • 您知道 HTML 中不应该有 吗?您应该使用字符实体,例如 <和> - 浏览器会将它们呈现为
  • DrJokepu 是正确的。您的 sn-p 是无效的 HTML。
  • @DrJokepu,所以如果我使用 htmlspecialchars(),它会将 > 编码为 >但不剥离标签。基本上,我只想允许纯文本。最简单的方法是什么?
  • @SpliFF - 不,它不是无效的。添加一个文档类型和一个标题元素,并通过validator.w3.org/check的直接输入框尝试。
  • 相关问题:stackoverflow.com/questions/1996344/… 恕我直言,只需将strip_tags() 放在一边,继续使用htmlspecialchars()。无需夸大其词。

标签: php html


【解决方案1】:

您可以使用HTML Purifier,这不仅适用于您编写的&lt;p&gt;if A &gt; B&lt;/p&gt; 示例,还适用于DrJokepu 编写的示例&lt;p&gt;1&lt;2 &amp;&amp; 6&gt;4&lt;/p&gt;

给定输入 &lt;p&gt;1&lt;2 &amp;&amp; 6&gt;4&lt;/p&gt; 并将允许的元素设置为 none,HTML 净化器给出输出:1&amp;lt;2 &amp;amp;&amp;amp; 6&amp;gt;4

【讨论】:

    【解决方案2】:

    这将删除所有看起来像 HTML 标记的内容。

    htmlentities(preg_replace('/<\\S.*?>/', '', $text));
    

    【讨论】:

    【解决方案3】:

    不幸的是,最简单、最可靠的方法是使用 HTML 解析器。 This one 会成功的。我不知道它是否会处理像上面这样的 HTML 片段。如果不是,那么包装以使其可接受的 HTML 应该是微不足道的。

    正如其他人指出的那样,使用正则表达式解析 HTML 有许多边缘情况需要处理,而且难度很大,因为 HTML 不规则。

    【讨论】:

      【解决方案4】:

      试试我写的这个正则表达式:]?="(\"|[^"])?")?([^>] em>?=''(\''|[^''])?'')?[^>]*?>

      【讨论】:

        【解决方案5】:

        用途:

        <p><?php echo htmlspecialchars("if A > B") ?></p>
        

        (当然你可以使用任何输入代替文字字符串)

        htmlspecialchars() 将纯文本转换为 HTML 文本,保留 &lt;&gt;

        【讨论】:

        • 它不会像 OP 要求的那样去除 HTML 标签。
        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 2011-11-14
        • 1970-01-01
        • 2020-07-11
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多