Position actuelle: Accueil> Derniers articles> Erreurs communes lors de l'utilisation de MB_Parse_Str: Pourquoi le codage n'est-il pas spécifié de problèmes?

Erreurs communes lors de l'utilisation de MB_Parse_Str: Pourquoi le codage n'est-il pas spécifié de problèmes?

gitbox 2025-09-16

Dans PHP, la fonction MB_PARSE_STR est utilisée pour analyser les chaînes de requête codées par URL en tableaux de variables, qui font partie d'une extension de chaîne multi -yte (MBSTring). MB_PARSE_STR prend en charge une gamme plus large de codages de caractères par rapport à la fonction PARSE_STR , en particulier lorsqu'il s'agit de chaînes contenant des jeux de caractères multi -yte. Bien que cette fonction soit très utile, vous pouvez rencontrer une série de problèmes si le codage n'est pas spécifié correctement. Cet article explorera les erreurs courantes lors de l'utilisation de MB_Parse_Str et pourquoi ne pas spécifier un encodage peut causer des problèmes d'analyse.

1. Présentation de la fonction MB_PARSE_STR

La fonction de MB_PARSE_STR est similaire à la fonction PARSE_STR intégrée de PHP, qui analyse les chaînes de requête en variables. Si aucun encodage de caractères n'est spécifié, MB_Parse_Str utilise le codage par défaut. La syntaxe de base de cette fonction est la suivante:

 <span><span><span class="hljs-title function_ invoke__">mb_parse_str</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$arr</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">void</span></span><span>
</span></span>
  • $ str : La chaîne de requête entrée.

  • $ arr : tableau de sortie contenant des paires de valeurs clés analysées.

  • $ Encodage : Encodage de caractères facultatif. S'il n'est pas spécifié, MB_Parse_Str utilise le codage par défaut de l'extension MBSTring .

2. Encodage non spécifié

La fonction MB_PARSE_STR de PHP est différente du PARSE_STR standard, qui effectue l'analyse de caractère en fonction du codage spécifié. Si aucun encodage n'est spécifié, les erreurs courantes suivantes peuvent se produire:

2.1 Erreur d'analyse de chaîne

Si la chaîne de requête contient des caractères multilinants (comme le chinois, le japonais, le coréen, etc.), le codage non spécifié peut entraîner une mauvaise interprétation de ces personnages comme brouillé ou perdu. En effet

Par exemple, considérez la chaîne de requête suivante:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"name=%E4%BD%A0%E5%A5%BD"</span></span><span>;
</span></span>

Si le codage n'est pas spécifié, MB_PARSE_STR ne peut pas analyser le% E4% BD% A0% E5% A5% BD correctement, mais le convertissez-le à la place en valeurs brouillées ou incorrectes.

2.2 La prise en charge du jeu de caractères multi-octets est manquante

MB_PARSE_STR est conçu avec des jeux de caractères multi-octets (tels que UTF-8, Shift-Jis, EUC-JP, etc.), mais si l'encodage n'est pas explicitement spécifié, MB_Parse_str peut ne pas traiter correctement les données à partir de jeux de caractères non ASCII. Cela entraînera que certains personnages apparemment normaux ne soient pas analysés correctement.

2.3 Perte de données causée par un codage de caractères incorrect

Si la chaîne de requête contient des symboles spéciaux ou des caractères non standard (tels que chinois, russe, arabe, etc.) sans spécifier le format de codage correct, MB_Parse_Str peut induire ces données en erreur ou les mal interpréter à des valeurs incorrectes. Par exemple, les caractères chinois sont correctement analysés sous le codage UTF-8, mais s'il est analysé en utilisant le codage ISO-8859-1, ces personnages peuvent être mal interprétés comme des personnages brouillés ou non reconnus.

3. Comment éviter les problèmes de codage

Pour éviter les erreurs d'analyse due à un décroche, il est recommandé que le codage des caractères soit spécifié explicitement lors de l'appel MB_Parse_str . Cela garantit que les caractères multi -yte de la chaîne de requête peuvent être analysés correctement.

3.1 Spécifiez le codage correct

Si votre application est basée sur le codage UTF-8, il est recommandé de spécifier le codage UTF-8 explicitement lors de l'appel MB_PARSE_STR :

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"name=%E4%BD%A0%E5%A5%BD"</span></span><span>;
</span><span><span class="hljs-variable">$arr</span></span><span> = [];
</span><span><span class="hljs-title function_ invoke__">mb_parse_str</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>, </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">$arr</span></span><span>);
</span></span>

Sortir:

 <span><span><span class="hljs-keyword">Array</span></span><span>
(
    [</span><span><span class="hljs-type">name</span></span><span>] =&gt; Bonjour
)
</span></span>

3.2 Détection et codage dynamiques

Si vous ne pouvez pas vous assurer le format de codage de la chaîne de requête, une autre façon consiste à détecter et à adapter dynamiquement le codage. Vous pouvez utiliser la fonction MB_DETECT_ENCODING pour détecter le type de codage de la chaîne d'entrée:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"name=%E4%BD%A0%E5%A5%BD"</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">$str</span></span><span>, [</span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GB2312'</span></span><span>, </span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>]);
</span><span><span class="hljs-variable">$arr</span></span><span> = [];
</span><span><span class="hljs-title function_ invoke__">mb_parse_str</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span></span>

De cette façon, vous pouvez détecter et analyser automatiquement en fonction des conditions réelles et utiliser le codage approprié.

4. Résumé

Lors de l'utilisation de MB_Parse_Str , ne pas spécifier le codage de caractères correct peut entraîner une gamme de problèmes d'analyse, en particulier lorsqu'il s'agit de jeux de caractères multi-gytets. Pour s'assurer que la chaîne de requête est analysée correctement, il est recommandé que les encodages de caractères soient toujours explicitement spécifiés lors de l'appel MB_PARSE_STR , en particulier lors du traitement des entrées utilisateur ou des données externes. De plus, la compréhension et l'adaptation de différentes méthodes de codage des caractères peuvent améliorer la robustesse du programme et éviter la perte de données ou le code brouillé causé par des problèmes d'encodage.