Position actuelle: Accueil> Derniers articles> Quels sont les conseils pour utiliser MB_Substitute_Character et MB_Convert_encoding ensemble?

Quels sont les conseils pour utiliser MB_Substitute_Character et MB_Convert_encoding ensemble?

gitbox 2025-09-28

1. Le rôle de mb_substitute_character

MB_SUBSTITUTE_CHARACTER est un élément de réglage dans la bibliothèque de jeux de caractères Multibyte qui définit des caractères alternatifs lorsque la conversion de codage des caractères échoue. Lorsqu'un caractère ne peut pas être converti correctement, MB_SUBSTITUTE_CHARACTER détermine comment PHP gère ce caractère décvertible. Par défaut, si le caractère ne peut pas être converti, PHP utilise ? comme caractère alternatif.

Par exemple, si vous rencontrez des caractères qui ne peuvent pas être représentés dans le GBK lors de la conversion de l'UTF-8 en GBK, le comportement par défaut serait de remplacer ces caractères par des points d'interrogation ?.

 <span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'none'</span></span><span>); </span><span><span class="hljs-comment">// Aucun caractères alternatifs n&#39;est utilisé</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'?'</span></span><span>);    </span><span><span class="hljs-comment">// utiliser"?"Comme personnage alternatif</span></span><span>
</span></span>

En appelant MB_Substitute_Character, vous pouvez contrôler la forme du caractère de substitution et même la définir sur une chaîne vide ou un symbole spécifique.

2. Le rôle de mb_convert_encoding

MB_CONVERT_ENCODING est une fonction utilisée dans PHP pour convertir le codage des caractères. Il prend en charge une variété de formats d'encodage de caractères, couramment utilisés, tels que UTF-8 , GBK , ISO-8859-1 , etc.

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Cordes chinoises"</span></span><span>;
</span><span><span class="hljs-variable">$converted_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>, </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">$converted_str</span></span><span>;
</span></span>

Il convertit $ str du codage UTF-8 en codage ISO-8859-1 , et lors de la conversion, il décidera s'il doit être remplacé en fonction des caractères de la chaîne source. Si le codage cible ne peut pas représenter certains caractères dans le caractère source, la configuration de MB_Substitute_Character déterminera la représentation du caractère de substitut.

3. Techniques d'utilisation coordonnées pour les deux

L'utilisation collaborative de MB_Substitute_Character et MB_Convert_Encoding est cruciale lorsque vous devez convertir une chaîne d'un codage à un autre et que vous souhaitez traiter les caractères qui ne peuvent pas être convertis pendant le processus. Voici quelques conseils courants:

3.1 Définition des caractères alternatifs appropriés

Dans certains cas, les caractères de la chaîne source ne peuvent pas trouver les caractères correspondants dans le codage cible. À l'heure actuelle, vous pouvez utiliser MB_substitute_character pour définir des caractères alternatifs pour éviter le code brouillé. Par exemple, remplacez les caractères qui ne peuvent pas être convertis par des symboles ou des chaînes spécifiques.

 <span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'!'</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-string">'Bonjour,monde'</span></span><span>, </span><span><span class="hljs-string">'ASCII'</span></span><span>, </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">$str</span></span><span>; </span><span><span class="hljs-comment">// Sortir "???,!"</span></span><span>
</span></span>

Dans cet exemple, le personnage bonjour, la partie chinoise du monde ne peut pas être représentée dans le codage ASCII , donc le personnage de substitut ! est utilisé à la place de caractères qui ne peuvent pas être convertis.

3.2 Évitez les remplacements inutiles

Si vous souhaitez éviter complètement la substitution de caractères, revenez plutôt directement à la chaîne d'origine ou arrêtez l'exécution lorsqu'une erreur se produit, vous pouvez définir MB_SUSTITUTE_CHARACTER à None . Pour le moment, tous les caractères qui ne peuvent pas être convertis ne seront pas remplacés et le système peut lancer une erreur ou renvoyer un résultat imprévisible.

 <span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'none'</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-string">'Bonjour,monde'</span></span><span>, </span><span><span class="hljs-string">'ASCII'</span></span><span>, </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">$str</span></span><span>; </span><span><span class="hljs-comment">// Si la conversion ne peut pas être,Des avertissements ou des erreurs apparaîtront</span></span><span>
</span></span>
3.3 Utiliser le codage cible approprié

Assurez-vous que le codage cible peut soutenir efficacement tous les caractères du codage source. Si vous savez que les chaînes de source utilisent principalement une sorte de jeu de caractères et que le jeu de caractères cible prend en charge une gamme plus large de caractères (tels que UTF-8), vous pouvez éviter d'utiliser des caractères alternatifs. D'une manière générale, l'UTF-8 est une option de codage universelle qui est compatible avec les caractères dans presque toutes les langues.

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"Cordes chinoises"</span></span><span>;
</span><span><span class="hljs-variable">$converted_str</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GBK'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$converted_str</span></span><span>; </span><span><span class="hljs-comment">// Conversion normale</span></span><span>
</span></span>

Si vous n'êtes pas sûr de savoir si le codage cible peut prendre en charge tous les caractères, il est préférable de vérifier le résultat de la conversion de caractères à l'avance ou d'utiliser MB_Substitute_Character pour gérer les caractères qui peuvent échouer dans la conversion.

3.4 Gestion des erreurs de l'utilisation de MB_Convert_encoding dans le temps

Dans certains cas, si vous rencontrez des caractères qui ne peuvent pas être convertis lors de l'utilisation de MB_CONVERT_ENCODING , un mécanisme de gestion des erreurs peut être nécessaire pour assurer le processus de conversion fluide. Vous pouvez utiliser @ pour supprimer les avertissements et décider si une capture d'erreur supplémentaire est nécessaire en fonction des besoins de l'entreprise.

 <span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-string">'none'</span></span><span>);
</span><span><span class="hljs-variable">$str</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-string">'Caractères qui ne peuvent pas être convertis'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$str</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La conversion de caractère a échoué"</span></span><span>;
}
</span></span>

4. Résumé

MB_substitute_character et mb_convert_encoding sont deux fonctions PHP puissantes qui peuvent nous aider à gérer diverses situations complexes dans la conversion de codage de caractères. L'utilisation de ces deux fonctions peut raisonnablement éviter efficacement les problèmes de code brouillé et fournir une meilleure expérience utilisateur.

  • La définition des caractères de substitut appropriés (tels que MB_Substitute_Character ) vous permet d'éviter le code brouillé inutile lorsque la conversion de caractères échoue.

  • Lorsque vous utilisez MB_Convert_encoding , sélectionnez le codage cible raisonnablement et assurez-vous que la chaîne source est compatible avec le codage cible, ce qui peut réduire la possibilité de perte de caractères.

En utilisant de manière flexible ces deux fonctions, les développeurs PHP peuvent être plus qualifiés dans le traitement des caractères, améliorant les capacités de support multiplateforme et internationales des applications.