当前位置: 首页> 最新文章列表> 如何使用 strip_tags 函数去除HTML中的SVG标签,保持内容简洁?

如何使用 strip_tags 函数去除HTML中的SVG标签,保持内容简洁?

gitbox 2025-08-07

在Web开发中,我们常常需要清理或过滤HTML内容,以确保页面展示时不受无关标签的干扰,特别是在用户提交的内容中,可能会包含一些不安全的或不必要的HTML标签。在PHP中,strip_tags 函数是一个常用的工具,它可以帮助我们从HTML字符串中去除特定的标签。

然而,在处理包含SVG图像或其他复杂元素的HTML时,我们可能希望仅去除某些标签,而保留有用的结构和内容。例如,去除SVG标签同时保持其中的文字和其他结构。

strip_tags 的基本用法

PHP的 strip_tags 函数默认会去除所有HTML标签。它的语法如下:

<span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">null</span></span><span> </span><span><span class="hljs-variable">$allowed_tags</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
  • $str: 要处理的HTML字符串。

  • $allowed_tags: 可选参数,指定需要保留的标签。若该参数为空,则去除所有标签。

举个例子:

<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"&lt;p&gt;This is a &lt;b&gt;bold&lt;/b&gt; paragraph with an &lt;a href='#'&gt;anchor&lt;/a&gt; link.&lt;/p&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$cleaned_html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$cleaned_html</span></span><span>;
</span></span>

输出将是:

<span><span>This </span><span><span class="hljs-keyword">is</span></span><span> a bold paragraph </span><span><span class="hljs-keyword">with</span></span><span> an anchor link.
</span></span>

默认情况下,strip_tags 会删除所有HTML标签。但如果我们希望保留某些标签(如 <b><a>),可以通过第二个参数来指定:

<span><span><span class="hljs-variable">$cleaned_html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, </span><span><span class="hljs-string">'&lt;b&gt;&lt;a&gt;'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$cleaned_html</span></span><span>;
</span></span>

输出将是:

<span><span>This </span><span><span class="hljs-keyword">is</span></span><span> a bold paragraph </span><span><span class="hljs-keyword">with</span></span><span> an anchor link.
</span></span>

去除SVG标签的需求

在一些复杂的HTML中,尤其是包含SVG(可缩放矢量图形)的内容时,strip_tags 默认会去除SVG标签。假设我们有如下HTML,包含一个SVG图形和一些文字内容:

<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"&lt;div&gt;Some content before SVG&lt;/div&gt;&lt;svg&gt;&lt;circle cx='50' cy='50' r='40' stroke='green' stroke-width='4' fill='yellow' /&gt;&lt;/svg&gt;&lt;div&gt;Some content after SVG&lt;/div&gt;"</span></span><span>;
</span></span>

如果使用strip_tags,它会去除整个SVG标签,但可能导致我们丢失有用的内容。比如:

<span><span><span class="hljs-variable">$cleaned_html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$cleaned_html</span></span><span>;
</span></span>

输出:

<span><span><span class="hljs-keyword">Some</span></span><span> content </span><span><span class="hljs-keyword">before</span></span><span> SVGSome content </span><span><span class="hljs-keyword">after</span></span><span> SVG
</span></span>

这时,我们可以使用strip_tags的第二个参数来指定需要保留的标签,然而SVG标签并不是标准HTML标签,因此如果我们没有额外的处理方法,strip_tags仍然会删除整个SVG元素。

保留内容并去除SVG标签

为了只去除SVG标签并保留其中的内容,可以采取两步走的方式:

  1. 使用 strip_tags 去除除SVG之外的所有标签。

  2. 利用正则表达式或其他方式处理SVG内容,保留其内部的文本或其他结构。

示例代码

<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"&lt;div&gt;Some content before SVG&lt;/div&gt;&lt;svg&gt;&lt;circle cx='50' cy='50' r='40' stroke='green' stroke-width='4' fill='yellow' /&gt;&lt;/svg&gt;&lt;div&gt;Some content after SVG&lt;/div&gt;"</span></span><span>;

</span><span><span class="hljs-comment">// 步骤1:去除所有HTML标签</span></span><span>
</span><span><span class="hljs-variable">$cleaned_html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>);

</span><span><span class="hljs-comment">// 步骤2:保留SVG内的文字内容或其他需要的信息</span></span><span>
</span><span><span class="hljs-variable">$cleaned_html</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/&lt;svg.*?&gt;(.*?)&lt;\/svg&gt;/is'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$cleaned_html</span></span><span>);

</span><span><span class="hljs-comment">// 输出清理后的结果</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$cleaned_html</span></span><span>;
</span></span>

输出将是:

<span><span><span class="hljs-keyword">Some</span></span><span> content </span><span><span class="hljs-keyword">before</span></span><span> SVGSome content </span><span><span class="hljs-keyword">after</span></span><span> SVG
</span></span>

小结

strip_tags 是一个非常有用的函数,用于清理HTML中的不必要标签。然而,对于包含SVG图形的HTML内容,我们需要在清理时更加小心,尤其是当我们需要保留SVG中的某些内容时。通过结合正则表达式,您可以在去除SVG标签的同时,保留其中的文本或其他结构,确保内容简洁且不丢失重要信息。