Position actuelle: Accueil> Derniers articles> Comment utiliser MB_SUBSTITUTE_CHARACTER pour éviter les problèmes de troncature de chaîne et brouillé?

Comment utiliser MB_SUBSTITUTE_CHARACTER pour éviter les problèmes de troncature de chaîne et brouillé?

gitbox 2025-09-03

Comment utiliser MB_SUBSTITUTE_CHARACTER pour éviter les problèmes de troncature de chaîne et brouillé?

Lorsque vous traitez avec un codage multi-octets (tel que UTF-8, GBK, etc.), vous rencontrez souvent des problèmes brouillés ou tronqués, en particulier lorsque vous effectuez des opérations de chaîne ou en interceptant. PHP fournit certaines fonctions pour faire face à ces problèmes, et MB_Substitute_Character est un outil très utile. Cet article présentera comment utiliser MB_SUBSTITUTE_CHARACTER pour éviter les problèmes de troncature de chaîne et brouillé.

1. Introduction à la fonction MB_substitute_character

MB_SUBSTITUTE_CHARACTER est une fonction dans l'extension de chaîne PHP MultiByte (MBSTring). Sa fonction principale est de spécifier un caractère de substitut pour remplacer les caractères non valides ou illégaux rencontrés pendant les opérations de chaîne multi -yte. De cette façon, même s'il y a des caractères non reconnus dans la chaîne d'entrée, il peut s'assurer que le programme ne s'écrase pas ou ne sortira pas de code brouillé en raison de la rencontre de caractères illégaux.

Prototype de fonction:

 <span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>([</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$substitute_char</span></span><span> = MB_SUBSTITUTE_CHARACTER]);
</span></span>
  • $ substitute_char : utilisé pour spécifier un caractère alternatif, peut être une valeur entière codée par le caractère ou utiliser la constante MB_Substitute_Character . La valeur par défaut est MB_Substitute_Character , ce qui signifie le caractère de substitut par défaut (généralement le point d'interrogation "?").

2. Pourquoi les problèmes de troncature des cordes et de brouillage se produisent-ils?

Lorsque vous utilisez des chaînes multi-octets, telles que l'interception des caractères ( MB_SUBSTR ) ou la recherche de caractères ( MB_STRPOS ), si les limites des caractères ne sont pas traitées correctement, une troncature de caractères brouillée ou incomplète peut se produire. En effet, tous les personnages n'occupent pas le même nombre d'octets. Si l'interception ou l'opération n'est pas effectuée en fonction du nombre correct d'octets, une partie d'un caractère peut être coupée par erreur, ce qui entraîne un code brouillé.

3. Comment éviter le code brouillé et la troncature via MB_Substitute_Character ?

Pour vous assurer qu'il n'y a pas de problème brouillé ou tronqué lors du traitement des chaînes, vous pouvez utiliser MB_Substitute_Character pour définir un caractère de substitut, et lorsque vous rencontrez des caractères non reconnus ou illégaux, utilisez ce caractère pour remplacer le caractère d'origine. De cette façon, le programme peut non seulement continuer à s'exécuter, mais aussi les chaînes de sortie seront plus amicales, évitant les accidents directs ou les écrans brouillés.

Exemple 1: Spécifiez le caractère alternatif comme point d'interrogation ("?")

 <span><span><span class="hljs-comment">// Définissez le caractère alternatif à des questions“?”</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(<span class="hljs-string">'?");
 
// Échantillonnage
$string = "Hello, Bonjour,monde!";
 
// Supposons que nous utilisons gbk Chaîne codée,Effectuer une interception de multicette
echo mb_substr($string, 0, 10, '</span>GBK<span class="hljs-string">');
</span></span></span>

Dans ce code, lorsque la chaîne ne peut pas être traitée correctement, le système utilise un point d'interrogation ("?") Au lieu de lancer une erreur ou d'afficher directement des caractères brouillés.

Exemple 2: Encodage entier à l'aide de caractères alternatifs

Vous pouvez également utiliser des valeurs entières des caractères de substitut pour contrôler davantage les caractères de substitut affichés. Par exemple, utilisez un cocode en cocode "?" personnages au lieu de personnages illégaux.

 <span><span><span class="hljs-comment">// Définissez le caractère alternatif àUnicodeCodé“?”(U+FFFD)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mb_substitute_character</span></span><span>(</span><span><span class="hljs-number">0xFFFD</span></span><span>);

</span><span><span class="hljs-comment">// Échantillonnage</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, Bonjour,world!"</span></span><span>;
 
</span><span><span class="hljs-comment">// utiliser UTF-8 Encodage pour intercepter</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span></span>

Dans cet exemple, des caractères illégaux ou non reconnus seront remplacés par le "?" Symbole afin que le programme puisse continuer à exécuter gracieusement même lorsque des caractères non reproductibles sont rencontrés.

4. Scénarios d'utilisation communs

4.1 Lorsque l'interception de personnages multi-octets

Lors de l'interception des chaînes multi-octets, la fonction MB_SUBSTR peut être utilisée en conjonction avec MB_SUSTITUTE_CHARACTER pour éviter la troncature des caractères en raison d'une position d'interception incorrecte.

 <span><span><span class="hljs-comment">// Définir des caractères alternatifs</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">// Supposons que nous ayons une chaîne contenant des caractères multi -yte</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Ceci est un texte de test"</span></span><span>;

</span><span><span class="hljs-comment">// Intercepter les dix premiers personnages</span></span><span>
</span><span><span class="hljs-variable">$sub_string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">10</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">$sub_string</span></span><span>;  </span><span><span class="hljs-comment">// Sortir “Ceci est un test”</span></span><span>
</span></span>

Si vous utilisez directement la fonction substruelle régulière pour intercepter la chaîne, vous pouvez rencontrer des problèmes de code brouillé. Cette situation peut être évitée après MB_substr et définir les caractères de substitut appropriés.

4.2 Lors du codage de conversion

Lors de l'exécution de personnages codant pour la conversion, des caractères incompatibles peuvent être rencontrés. À l'heure actuelle, vous pouvez également utiliser MB_Substitute_Character pour vous assurer que la chaîne convertie ne produit pas de code brouillé.

 <span><span><span class="hljs-comment">// Définir des caractères alternatifs</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">// Supposons que nous voulons en transférer unUTF-8Convertir la chaîne enGBK</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"C&#39;est une partieUTF-8Chaîne codée"</span></span><span>;
</span><span><span class="hljs-variable">$converted_string</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'GBK'</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_string</span></span><span>;
</span></span>

En définissant des caractères alternatifs, même si les caractères qui ne peuvent pas être convertis sont rencontrés pendant le processus de conversion, l'ensemble du processus de conversion ne sera pas affecté.

5. Résumé

MB_SUBSTITUTE_CHARACTER est une fonction très pratique qui peut éviter efficacement les problèmes de troncature des chaînes et brouillées. Lorsque vous effectuez des opérations de chaînes multi-octets, l'utilisation correcte de MB_Substitute_Character améliore non seulement la robustesse du code, mais garantit également que le programme ne se bloque pas lors de la rencontre de caractères illégaux et sorties de caractères alternatifs plus amicaux. Qu'il s'agisse d'interception de caractères, de conversion de codage ou de recherche de caractères, MB_Substitute_Character est un outil important pour résoudre les problèmes de code brouillé et de troncature.