Position actuelle: Accueil> Derniers articles> Comment mieux utiliser MB_ENCODE_NUMERICALENTITY avec les HTMLentités pour le traitement de codage des caractères?

Comment mieux utiliser MB_ENCODE_NUMERICALENTITY avec les HTMLentités pour le traitement de codage des caractères?

gitbox 2025-08-19
<span><span><span class="hljs-meta">&lt;?php</span></span><span>

</span><span><span class="hljs-comment">// Ce document montre comment l&#39;utiliser mieux mb_encode_numericentity Correspondre htmlentities Effectuer un traitement de codage de caractères</span></span><span>
</span><span><span class="hljs-comment">// Pour PHP Évitez le code brouillé ou la perte d&#39;informations lors du traitement des caractères de plusieurs personnes dans l&#39;environnement</span></span><span>

</span><span><span class="hljs-comment">// ----------------------------</span></span><span>

<span class="hljs-comment">/**
 * Comment l&#39;utiliser mieux mb_encode_numericentity Correspondre htmlentities Effectuer un traitement de codage de caractères?
 *
 * Dans le traitement inclut non ASCII Contenu multilingue des caractères(Comme en chinois、japonais、Coréen, etc.)heure,PHP de `htmlentities` 函数常Pour将特殊personnage转换为 HTML entité,Pour éviter XSS Problèmes de sécurité。
 * Cependant,`htmlentities` 对多字节personnagede支持有限,Surtout lorsque le jeu de caractères est défini UTF-8 heure,Certains personnages peuvent être directement ignorés ou échappés incomplètement。
 *
 * Pour résoudre ce problème,`mb_encode_numericentity` Peut coopérer `htmlentities` utiliser,Ne va pas ASCII personnage先转换为数字entité,Le faire de manière unifiée HTML S&#39;échapper。
 * Expliquons ce processus à travers des exemples pratiques。
 *
 * un、Exemples d&#39;utilisation de base
 */</span>

</span><span><span class="hljs-variable">$input</span></span><span> = </span><span><span class="hljs-string">"Bonjour,monde!&lt;script&gt;alert('XSS');&lt;/script&gt;"</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;

</span><span><span class="hljs-comment">// 定义entité转换portée(0x80 arriver 0xFFFF Indique tout non ASCII personnage)</span></span><span>
</span><span><span class="hljs-variable">$convmap</span></span><span> = [</span><span><span class="hljs-number">0x80</span></span><span>, </span><span><span class="hljs-number">0xffff</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0xffff</span></span><span>];

</span><span><span class="hljs-comment">// 第un步:Ne va pas ASCII personnage转换为数字entité</span></span><span>
</span><span><span class="hljs-variable">$numericEntity</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_encode_numericentity</span></span><span>(</span><span><span class="hljs-variable">$input</span></span><span>, </span><span><span class="hljs-variable">$convmap</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);

</span><span><span class="hljs-comment">// Étape 2:将剩余内容S&#39;échapper为 HTML entité(comme &lt; &gt; &amp; Symboles)</span></span><span>
</span><span><span class="hljs-variable">$escapedOutput</span></span><span> = </span><span><span class="hljs-title function_ invoke__">htmlentities</span></span><span>(</span><span><span class="hljs-variable">$numericEntity</span></span><span>, ENT_QUOTES | ENT_HTML5, </span><span><span class="hljs-variable">$encoding</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$escapedOutput</span></span><span>;

<span class="hljs-comment">/**
 * Le résultat de sortie est similaire à:
 * &amp;#20320;&amp;#22909;&amp;#65292;&amp;#19990;&amp;#30028;&amp;#65281;&amp;lt;script&amp;gt;alert(&amp;#039;XSS&amp;#039;);&amp;lt;/script&amp;gt;
 *
 * visible,“Bonjour,monde!” 中de中文personnage已被转换为十进制 HTML entité,而脚本标签et引号等特殊personnage也被成功S&#39;échapper。
 *
 * deux、Pourquoi faire ça?
 *
 * - **Compatibilité améliorée**:htmlentities 在遇arriver非 ISO-8859-1 编码personnageheure行为不un,Coopérer mb_encode_numericentity 可确保所有personnage都被显式处理;
 * - **Améliorer la sécurité**:XSS Les attaques sont souvent injectées HTML Tag ou JavaScript Pour atteindre,提前S&#39;échapper所有可疑personnage可大大降低风险;
 * - **Évitez le code brouillé**:在输出arriver网页、enregistrer、或数据库heure,多字节personnagecomme果未正确S&#39;échapper可能被误解释,Par conséquent, un code brouillé ou une anomalie de données se produit。
 *
 * trois、Choses à noter
 *
 * 1. `mb_encode_numericentity` Être `htmlentities` **Avant** Appel,Sinon, pas ASCII personnage可能会被提前截断或忽略。
 * 2. `convmap` de设置要覆盖目标personnagede Unicode portée,常用配置comme `[0x80, 0xffff, 0, 0xffff]` Assez pour couvrir la plupart UTF-8 personnage。
 * 3. Si traité HTML Entrer le contenu(例comme用户提交de富文本),建议Coopérer `html_entity_decode` et `mb_decode_numericentity` Réaliser le transcodage bidirectionnel。
 *
 * Quatre、Conclusion
 *
 * 结合utiliser `mb_encode_numericentity` et `htmlentities` Ça peut être plus sûr、可靠地处理多语言环境下depersonnage编码问题。
 * Traitement de toute entrée utilisateur、Texte dynamique、Ou sortie vers le navigateur,强烈建议进行此类S&#39;échapper处理,以确保应用de稳定性et安全性。
 */</span>

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>