<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支持正則表達式,可以用來匹配複雜的標籤格式,甚至對標籤內部的屬性進行處理。例如:
</span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"<p class='intro'>示例文本</p>"</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">'/<p[^>]*>/i'</span></span><span>, </span><span><span class="hljs-string">'<div class="new-intro">'</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">// 輸出:<div class="new-intro">示例文本</p></span></span><span>
這裡用正則將所有帶屬性的<p>標籤替換成了帶新class的& lt ; div & gt ;標籤。 p > < h3 >三、結合strip_tags和preg_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>標籤,其他標籤均被剔除。
根據需求合理設計正則表達式和過濾邏輯,是實現自定義標籤過濾和處理的關鍵。