Dans PHP, la fonction html_entity_decode est utilisée pour convertir les entités HTML (telles que & amp;, & lt; ) à leurs caractères correspondants (tels que & , < ). Cette fonction est généralement utilisée pour convertir le contenu codé dans une page Web via HTMLSpecialCars ou Htmlentities pour l'affichage normal. Cependant, lors de l'utilisation réelle, certains développeurs ont constaté que bien que les paramètres de codage aient été transmis à HTML_ENTITY_DECODE , le paramètre ne semblait pas prendre effet, ce qui entraîne le résultat de la conversion non traité comme prévu.
Cet article analysera les erreurs courantes qui causent ce problème et fourniront des moyens de l'éviter.
La fonction html_entity_decode a trois paramètres:
String : la chaîne à convertir.
Flags : un paramètre Flag en option qui contrôle le comportement de conversion.
Encodage : spécifiez le format de codage des caractères, généralement en utilisant UTF-8 , ISO-8859-1 , etc.
Si le paramètre de codage est passé de manière incorrecte ou n'est pas réglé correctement, il peut entraîner la convertir correctement les caractères de la fonction. Les erreurs courantes sont:
Encodage de caractères incorrect (comme le passage dans GBK , tandis que le jeu de caractères réel est UTF-8 ).
Ignorez les paramètres de codage des caractères et utilisez l' ISO-8859-1 par défaut.
Assurez-vous de spécifier le codage correct explicitement lors de l'appel html_entity_decode . Par exemple, si elle est codée en tant que UTF-8 , le code devrait ressembler à ceci:
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">'&lt;div&gt;Hello World&lt;/div&gt;'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">html_entity_decode</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span></span>
Même si vous spécifiez explicitement le format de codage, si le codage des données réels ne correspond pas au codage spécifié, la fonction ne peut toujours pas se convertir correctement. Par exemple, les données stockées dans la base de données sont le codage UTF-8, et vous passez en ISO-8859-1 dans HTML_ENTITY_DECODE , et la conversion ne fonctionnera pas comme prévu.
Lors du traitement de la conversion du codage, assurez-vous que le codage de la chaîne est cohérent avec le format de codage spécifié. Vous pouvez utiliser mb_detect_encoding () pour détecter le codage réel d'une chaîne:
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">'&lt;div&gt;Hello World&lt;/div&gt;'</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_detect_encoding</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, </span><span><span class="hljs-title function_ invoke__">mb_list_encodings</span></span><span>(), </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">html_entity_decode</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>
Le deuxième paramètre de html_entity_decode est le paramètre Flags (FLAGS), qui contrôle le comportement de conversion. Par exemple:
Ent_noquotes : ne convertissez pas les guillemets ( & quot et & apos; ).
ENT_QUOTES : Convertir les citations doubles et simples.
Ent_html401 , ent_xml1 , etc .: Spécifiez les règles de conversion liées à HTML ou XML.
Si les paramètres d'indicateur appropriés ne sont pas définis, certains caractères peuvent ne pas être convertis comme prévu.
Choisissez le bon signe au besoin. Par exemple, si vous souhaitez convertir tous les caractères d'entité, y compris les citations, vous pouvez utiliser ENT_QUOTES :
<span><span><span class="hljs-variable">$html</span></span><span> = </span><span><span class="hljs-string">'&quot;Hello&quot;'</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">html_entity_decode</span></span><span>(</span><span><span class="hljs-variable">$html</span></span><span>, ENT_QUOTES, </span><span><span class="hljs-string">'UTF-8'</span></span><span>); </span><span><span class="hljs-comment">// Sortir: "Hello"</span></span><span>
</span></span>
Parfois, les cordes ont été codées plusieurs fois. Supposons qu'une chaîne ait été codée une fois par HTMLSpecialChars , puis décodé par HTML_ENTITY_DECODE . S'il n'est pas géré correctement pour le moment, le décodage sera invalide ou incomplet.
Assurez-vous que la chaîne codée n'est pas encodée à plusieurs reprises ou décodée. Si vous n'êtes pas sûr de l'état de la chaîne, vous pouvez d'abord faire HTML_entity_decode , puis vérifier le résultat de décodage, puis décider si un traitement supplémentaire est nécessaire.
L'implémentation PHP de la fonction html_entity_decode peut être légèrement différente dans différentes versions. Certaines versions PHP plus anciennes peuvent ne pas prendre en charge entièrement certains formats de codage ou paramètres FLAG, ce qui entraîne des résultats de conversion incohérents.
Assurez-vous que la version PHP que vous utilisez est suffisamment nouvelle et passez en revue la documentation appropriée pour confirmer le comportement de html_entity_decode . La mise à niveau vers des versions PHP plus récentes résout souvent ces problèmes de compatibilité.
HTML_ENTITY_DECODE est une fonction très utile, mais pour s'assurer que ses paramètres de codage peuvent prendre effet correctement, une attention particulière doit être accordée à l'encodage de correspondance, de paramètre de drapeau et d'évitement du codage en double. En examinant soigneusement ces détails, vous pouvez vous assurer que la fonction fonctionne comme prévu et éviter les situations où elle ne peut pas être décodée.
J'espère que cet article peut vous aider à comprendre et à résoudre le problème que les paramètres de codage html_entity_decode ne sont pas efficaces.