現在の位置: ホーム> 最新記事一覧> 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文字列。

  • $ Aldoce_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>など)を保持したい場合は、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">'&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タグを削除します。 SVGグラフといくつかのテキストコンテンツを含む次のHTMLがあるとします。

 <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の2番目のパラメーターを使用して保持する必要があるタグを指定できますが、SVGタグは標準のHTMLタグではないため、追加の処理方法がない場合、 Strip_TagsはSVG要素全体を削除します。

コンテンツを保持し、SVGタグを削除します

SVGタグのみを削除して内容を保持するために、2つのステップを踏むことができます。

  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タグを削除しながらテキストまたはその他の構造を保持し、コンテンツが簡潔で重要な情報を失わないようにします。