Web開発では、HTMLコンテンツをクリーニングまたはフィルタリングする必要があることがよくあり、特に安全でないHTMLタグを含む可能性のあるユーザーがサビされたコンテンツで、無関係なタグから干渉することなくページが表示されるようにします。 PHPでは、 Strip_Tags関数は、HTML文字列から特定のタグを削除するのに役立つ一般的なツールです。
ただし、SVG画像またはその他の複雑な要素を含むHTMLを使用する場合、有用な構造とコンテンツを保持しながら、特定のタグのみを削除することをお勧めします。たとえば、テキストやその他の構造を維持しながらSVGタグを削除します。
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文字列。
$ Aldoce_Tags :オプションのパラメーター、保持するタグを指定します。このパラメーターが空の場合、すべてのタグが削除されます。
例えば:
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"<p>This is a <b>bold</b> paragraph with an <a href='#'>anchor</a> link.</p>"</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>など)を保持したい場合は、2番目のパラメーターでそれらを指定できます。
<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">'<b><a>'</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>
いくつかの複雑なHTMLでは、特にSVG(スケーラブルベクトルグラフィックス)が含まれている場合、 Strip_TagsはデフォルトでSVGタグを削除します。 SVGグラフといくつかのテキストコンテンツを含む次のHTMLがあるとします。
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"<div>Some content before SVG</div><svg><circle cx='50' cy='50' r='40' stroke='green' stroke-width='4' fill='yellow' /></svg><div>Some content after SVG</div>"</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の2番目のパラメーターを使用して保持する必要があるタグを指定できますが、SVGタグは標準のHTMLタグではないため、追加の処理方法がない場合、 Strip_TagsはSVG要素全体を削除します。
SVGタグのみを削除して内容を保持するために、2つのステップを踏むことができます。
STRIP_TAGSを使用して、SVGを除くすべてのタグを削除します。
正規表現またはその他の方法を使用して、SVGコンテンツを処理し、内部テキストまたはその他の構造を保持します。
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">"<div>Some content before SVG</div><svg><circle cx='50' cy='50' r='40' stroke='green' stroke-width='4' fill='yellow' /></svg><div>Some content after SVG</div>"</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">'/<svg.*?>(.*?)<\/svg>/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タグを削除しながらテキストまたはその他の構造を保持し、コンテンツが簡潔で重要な情報を失わないようにします。