Lorsque vous utilisez PHP pour le traitement des chaînes multipyte, MB_ERGI_REPLACE est une fonction très pratique qui prend en charge le remplacement régulier du codage multi-gyte et est insensible à la casse. Cependant, de nombreux développeurs rencontrent une confusion lors de l'utilisation: le résultat de remplacement ressemble à un tableau, mais c'est en fait une chaîne.
Cet article analysera ce phénomène pour vous aider à comprendre correctement le type de valeur de retour et l'utilisation de MB_EREGI_REPLACE .
MB_EREGI_REPLACE est une fonction de remplacement régulière à plusieurs octets fournie par l'extension PHP MBSTRING. Sa fonction est similaire à Preg_replace , mais elle est optimisée pour le jeu de caractères multi-octets. Son prototype de fonction est le suivant:
<code> String MB_ERGI_REPLACE (String $ Pattern, String $ Remplacement, String $ String [, String $ Option = "MSR"]) </code>Description du paramètre:
$ motif : modèle d'expression régulière, insensible à la casse.
$ Remplacement : la chaîne remplacée.
$ String : la chaîne cible à rechercher.
$ Option : Modificateur d'expression régulière, par défaut "MSR" .
La valeur de retour est la chaîne remplacée.
Dans de nombreux cas, les développeurs trouveront des appels:
<code> $ result = mb_eregi_replace ('modèle', 'remplacement', $ sujet); var_dump ($ result); </code>Une structure en forme de tableau apparaîtra dans le résultat de sortie, par exemple:
<code> String (14) "Array (contenu)" </code>Ceci est en fait dû au fait que le remplacement de la chaîne de remplacement contient des variables ou que le sujet $ lui-même a un formulaire de chaîne de type tableau, ou la référence régulière du groupe de capture est utilisée dans le remplacement $ , mais le contenu de référence n'est pas traité correctement, ce qui entraîne la chaîne remplacée pour contenir des informations sur le tableau.
Une autre incompréhension courante est que les groupes de capture réguliers (tels que \\ 1 , 1 $ ) sont compris comme des tableaux, mais en fait, ils ne se manifestent que comme du texte dans les cordes.
Supposons que vous ayez la chaîne suivante:
<code> $ sujet = "Bienvenue à m66.net, qui est une chaîne de test."; </code>Je souhaite utiliser MB_EREGI_REPLACE pour remplacer le nom de domaine comme example.com , et la méthode d'écriture est la suivante:
<code> $ result = mb_eregi_replace ('m66 \ .net', 'example.com', $ sujet); Echo $ Résultat; </code>Sortir:
<code> Bienvenue sur Exemple.com, qui est une chaîne de test. </code>Ce qui est retourné ici est le type de chaîne, et $ le résultat n'est pas un tableau.
Le type de tableau est utilisé dans la chaîne de remplacement:
Si $ remplacement est transmis dans un tableau, pas une chaîne, une erreur sera causée, mais cela rapportera généralement une erreur et ne renvoie pas silencieusement une chaîne qui ressemble à un tableau.
Misonction du groupe de capture utilisé dans le contenu de remplacement:
Supposons que vous utilisiez:
<code> $ result = mb_eregi_replace ('(m66 \ .net)', '$ 1com', $ sujet); </code>Ici, 1 $ est une référence de groupe de capture, mais si elle n'est pas analysée correctement, elle peut faire en sorte que la chaîne remplacée devienne le 1 $ littéral, ce qui fait que les gens pensent à tort qu'il s'agit d'un tableau ou d'une structure spéciale.
MB_ERGI_REPLACE La valeur de retour est toujours une chaîne .
Si vous voyez le résultat "comme un tableau", vérifiez si la chaîne de remplacement et la chaîne d'entrée contiennent du contenu qui peut provoquer une confusion.
Lorsque vous utilisez correctement les groupes de capture, assurez-vous que la syntaxe est correcte et évitez la sortie de contenu inattendu.
L'utilisation de var_dump pendant le débogage peut aider à confirmer les types de variables.
$ result = mb_eregi_replace ($ motif, $ remplacement, $ sujet);
Echo $ Résultat; // Sortie: veuillez visiter Exemple.com pour plus d'informations.
?>
</code>