當前位置: 首頁> 最新文章列表> 如何使用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標籤的同時,保留其中的文本或其他結構,確保內容簡潔且不丟失重要信息。