Dans le développement Web, nous devons souvent nettoyer ou filtrer le contenu HTML pour nous assurer que la page est affichée sans interférence à partir de balises non apparentées, en particulier dans le contenu soumis à l'utilisateur, qui peut contenir des balises HTML dangereuses ou inutiles. En PHP, la fonction strip_tags est un outil commun qui peut nous aider à supprimer des balises spécifiques des chaînes HTML.
Cependant, lorsque vous travaillez avec HTML contenant des images SVG ou d'autres éléments complexes, nous pouvons vouloir supprimer uniquement certaines balises tout en préservant une structure et un contenu utiles. Par exemple, la suppression des balises SVG tout en conservant le texte et d'autres structures qui s'y trouvent.
La fonction Strip_Tags de PHP supprimera toutes les balises HTML par défaut. Sa syntaxe est la suivante:
<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 : chaîne HTML à traiter.
$ allowing_tags : paramètre facultatif, spécifiant les balises à conserver. Si ce paramètre est vide, toutes les balises sont supprimées.
Par exemple:
<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>
La sortie sera:
<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>
Par défaut, Strip_Tags supprime toutes les balises HTML. Mais si nous voulons conserver certaines balises (comme <b> ou <a> ), nous pouvons les spécifier avec le deuxième paramètre:
<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>
La sortie sera:
<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>
Dans un HTML complexe, en particulier lorsqu'il contient SVG (Scalable Vector Graphics), Strip_Tags supprime les balises SVG par défaut. Supposons que nous ayons le HTML suivant, contenant un graphique SVG et du contenu texte:
<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>
Si vous utilisez Strip_Tags , il supprime l'intégralité de la balise SVG, mais cela peut nous faire perdre du contenu utile. Par exemple:
<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>
Sortir:
<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>
À l'heure actuelle, nous pouvons utiliser le deuxième paramètre de strip_tags pour spécifier les balises qui doivent être conservées, cependant, la balise SVG n'est pas une balise HTML standard, donc si nous n'avons pas de méthode de traitement supplémentaire, Strip_Tags supprimera toujours l'ensemble de l'élément SVG.
Afin de supprimer uniquement les balises SVG et de conserver le contenu en eux, vous pouvez faire deux étapes:
Utilisez Strip_Tags pour supprimer toutes les balises sauf SVG.
Utilisez des expressions régulières ou d'autres méthodes pour traiter le contenu SVG, en conservant son texte interne ou une autre structure.
<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">// étape1:Supprimer toutHTMLÉtiquette</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">// étape2:réserveSVGContenu texte ou autres informations requises</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">// Résultats nettoyés de sortie</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>
La sortie sera:
<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 est une fonction très utile pour nettoyer les balises inutiles en HTML. Cependant, pour le contenu HTML qui contient des graphiques SVG, nous devons être plus prudents lors du nettoyage, surtout lorsque nous devons garder quelque chose dans le SVG. En combinant des expressions régulières, vous pouvez y garder le texte ou d'autres structures tout en supprimant les balises SVG, en vous assurant que le contenu est concis et ne perd pas d'informations importantes.