L'échappement des caractères est une tâche courante en PHP, en particulier lors du traitement de l'entrée des utilisateurs ou de la présentation du contenu dynamique. HTMLentities et get_html_translation_table sont deux fonctions PHP couramment utilisées qui sont utilisées pour convertir les caractères en entités HTML et pour obtenir des tables de conversion pour les entités HTML, respectivement. L'utilisation raisonnable de ces deux fonctions peut réaliser une évasion plus précise des caractères, éviter les vulnérabilités de sécurité potentielles et assurer l'exactitude et la sécurité du site Web.
La fonction HTMLentities est utilisée pour échapper aux caractères dans une chaîne en entités HTML. Il est principalement utilisé pour empêcher les attaques de scripts (XSS) et d'autres attaques d'injection HTML. En convertissant certains caractères spéciaux (tels que < , > , & etc.) en entités HTML, les HTMLentités s'assurent que ces caractères sont correctement rendus dans le navigateur.
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"<div>Some text</div>"</span></span><span>;
</span><span><span class="hljs-variable">$escaped_string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlentities</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$escaped_string</span></span><span>; </span><span><span class="hljs-comment">// Sortir:&lt;div&gt;Some text&lt;/div&gt;</span></span><span>
</span></span>
Dans l'exemple ci-dessus, Htmlentities convertit les balises HTML <div> et </div> en caractères entités & lt; div & gt; et & lt; / div & gt;. Cela évite le navigateur analysant ces étiquettes, empêchant ainsi les attaques potentielles d'injection de script.
La fonction get_html_translation_table renvoie une table de traduction contenant tous les caractères spéciaux HTML et leurs entités correspondantes. Ce tableau est la base des travaux derrière les fonctions HTMLentities et HTMLSpecialCars . Grâce à ce tableau, vous pouvez personnaliser les évasions de caractères ou obtenir manuellement les entités correspondant à certains caractères.
<span><span><span class="hljs-variable">$translation_table</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_html_translation_table</span></span><span>(HTML_ENTITIES, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$translation_table</span></span><span>);
</span></span>
Cette fonction renvoie un tableau associatif où la clé est un caractère et la valeur est l'entité HTML correspondante. Par exemple, il renvoie une structure similaire à ce qui suit:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[<] => &lt;
[>] => &gt;
[&] => &amp;
[<span class="hljs-string">"] => &quot;
['] => &#039;
...
)
</span></span></span>
Bien que les HTMLentités puissent déjà effectuer la plupart des tâches d'échappement des personnages, nous devons parfois avoir un contrôle plus granulaire sur l'évasion des personnages, en particulier lorsque vous traitez des personnages spécifiques. Dans ce cas, la combinaison de get_html_translation_table peut rendre les opérations d'échappement plus précises et flexibles.
Supposons que vous souhaitiez échapper à certains caractères dans des entités HTML en fonction des règles personnalisées sans utiliser la méthode standard de l'échappement HTMLentities . Vous pouvez d'abord obtenir la table d'échappement standard via get_html_translation_table , puis modifier ce tableau en fonction de vos besoins.
<span><span><span class="hljs-comment">// Obtenir la norme HTML Table de conversion d'entité</span></span><span>
</span><span><span class="hljs-variable">$translation_table</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_html_translation_table</span></span><span>(HTML_ENTITIES, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-comment">// Modifier la méthode d'échappement de certains caractères dans le tableau</span></span><span>
</span><span><span class="hljs-variable">$translation_table</span></span><span>[</span><span><span class="hljs-string">'<'</span></span><span>] = </span><span><span class="hljs-string">'&lt;'</span></span><span>; </span><span><span class="hljs-comment">// Comportement par défaut</span></span><span>
</span><span><span class="hljs-variable">$translation_table</span></span><span>[</span><span><span class="hljs-string">'&'</span></span><span>] = </span><span><span class="hljs-string">'&amp;'</span></span><span>; </span><span><span class="hljs-comment">// Par exemple, nous gardons toujours '&' S'échapper</span></span><span>
</span><span><span class="hljs-comment">// 自定义其他字符的S'échapper</span></span><span>
</span><span><span class="hljs-variable">$translation_table</span></span><span>[</span><span><span class="hljs-string">'*'</span></span><span>] = </span><span><span class="hljs-string">'&ast;'</span></span><span>; </span><span><span class="hljs-comment">// Volonté '*' S'échapper为 '&ast;'</span></span><span>
</span><span><span class="hljs-comment">// Volonté修改后的表应用于字符串</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello * World!"</span></span><span>;
</span><span><span class="hljs-variable">$escaped_string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$translation_table</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$escaped_string</span></span><span>; </span><span><span class="hljs-comment">// Sortir:Hello &ast; World!</span></span><span>
</span></span>
De cette façon, vous pouvez contrôler de manière flexible quels personnages doivent être échappés et quels personnages restent tels qu'ils sont.
Supposons que vous vouliez simplement échapper à certains personnages avec une entité HTML tandis que d'autres restent tels quels. Vous pouvez combiner htmlentities et get_html_translation_table pour réaliser cet effet. Par exemple, vous voudrez peut-être échapper et , <et> tout en laissant les autres personnages tels qu'ils sont.
<span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"This is a <div> & 'text' with some special characters."</span></span><span>;
</span><span><span class="hljs-variable">$translation_table</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_html_translation_table</span></span><span>(HTML_ENTITIES, ENT_NOQUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-comment">// 只S'échapper <, > et & symbole</span></span><span>
</span><span><span class="hljs-variable">$escaped_string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$translation_table</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$escaped_string</span></span><span>; </span><span><span class="hljs-comment">// Sortir:This is a &lt;div&gt; &amp; 'text' with some special characters.</span></span><span>
</span></span>
En combinant raisonnablement des fonctions HTMLentities et GET_HTML_TRANSLATION_TABLE , les développeurs PHP peuvent obtenir des échappements de caractères plus flexibles et précis. Htmlentities est une fonction puissante et simple qui fonctionne dans la plupart des cas, tandis que GET_HTML_TRANSLATION_TABLE permet aux développeurs de personnaliser les tables de conversion pour un contrôle plus granulaire de caractères spécifiques. La combinaison des deux peut améliorer la sécurité et l'efficacité de l'échappement des caractères, réduire les risques de sécurité potentiels et assurer l'affichage normal du contenu Web dynamique.
Dans le processus de développement réel, le choix de la méthode d'échappement appropriée selon les besoins peut non seulement améliorer la robustesse du code, mais également fournir aux utilisateurs une expérience plus sûre et plus fiable.