當前位置: 首頁> 最新文章列表> strip_tags 與preg_replace 配合使用時,如何實現自定義標籤的過濾和處理?

strip_tags 與preg_replace 配合使用時,如何實現自定義標籤的過濾和處理?

gitbox 2025-08-26
<span><span><span class="hljs-meta"><?php</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-string">"開始執行腳本...\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h2>strip_tags 與 preg_replace 配合使用時,如何實現自定義標籤的過濾和處理?</h2>

<p>在PHP中,處理HTML字符串時,經常需要對其中的標籤進行過濾或替換。<code></span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>()

從示例中可以看到,只有<strong>標籤被保留,其它標籤被刪除。

二、preg_replace用於更複雜的匹配和替換

preg_replace支持正則表達式,可以用來匹配複雜的標籤格式,甚至對標籤內部的屬性進行處理。例如:

 
</span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"&lt;p class='intro'&gt;示例文本&lt;/p&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-string">'/&lt;p[^&gt;]*&gt;/i'</span></span><span>, </span><span><span class="hljs-string">'&lt;div class="new-intro"&gt;'</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">$result</span></span><span>; 
</span><span><span class="hljs-comment">// 輸出:&lt;div class="new-intro"&gt;示例文本&lt;/p&gt;</span></span><span>

這裡用正則將所有帶屬性的<p>標籤替換成了帶新class的& lt ; div & gt ;標籤。 p > < h3 >三、結合strip_tagspreg_replace實現自定義標籤過濾和處理 h3 > < p > strip_tags功能簡單,無法對標籤屬性進行判斷,也不能對標籤內的內容做複雜處理。結合preg_replace可以先用正則替換自定義標籤為標準標籤或者做屬性調整,再用strip_tags過濾非允許標籤。 p > < p >示例:我們希望只保留& lt ; b & gt ;和& lt ; a & gt ;標籤,但需要把自定義標籤& lt ; mytag & gt ;轉換成& lt ; span & gt ;,並且對& lt ; a & gt ;標籤只保留href屬性。 p > < pre >< code > $ html = "這是& lt ; mytag & gt ;自定義標籤& lt ;/ mytag & gt ;,還有& lt ; a href =' http :// example . com ' title =' title '& gt ;鏈接& lt ;/ a & gt ;,以及& lt ; b & gt ;加粗& lt ;/ b & gt ;。 "; // 第一步:將& lt ; mytag & gt ;替換成& lt ; span & gt ; $ html = preg_replace ([ '/& lt ;\/? mytag & gt ;/ i ' ], [ function ($ matches ) { return str_ireplace ([ 'mytag' , '/mytag' ], [ 'span' , '/span' ], $matches [ 0 ]); } ], $html ); // 第二步:過濾掉<a>標籤的非href屬性 $html = preg_replace_callback ( '/<a\s+([^>]*)>/i' , function( $matches ) { // 只保留href屬性 if ( preg_match ( '/href\s*=\s*["\']?([^"\'>\s]+)["\']?/i' , $matches [ 1 ], $hrefMatch )) { return ' <a href="' . $hrefMatch [ 1 ] . '"> ' ; } return '<a>' ; }, $html ); // 第三步:用strip_tags保留指定標籤 $result = strip_tags ( $html , '<b><a><span>' ); echo $result ;這樣,原本的<mytag>就被替換成了<span>,<a>標籤只保留了href屬性,且整體只允許保留<b>、<a>和<span>標籤,其他標籤均被剔除。

四、總結

  • strip_tags適合快速移除大部分標籤,允許保留部分簡單標籤。
  • preg_replace配合回調函數,可以靈活處理標籤轉換、屬性過濾等複雜需求。
  • 二者結合可以先用正則轉換或調整標籤,再用strip_tags做最終過濾,保證輸出的HTML既安全又符合業務需求。

根據需求合理設計正則表達式和過濾邏輯,是實現自定義標籤過濾和處理的關鍵。