Les fonctions de manipulation de chaîne communes STR_SPLIT et MB_STR_SPLIT dans PHP sont utilisées pour diviser les chaînes en tableaux par des longueurs spécifiées, mais leurs principes de travail sont très différents. Lorsque vous traitez avec des ensembles de caractères multi -yte (tels que le codage UTF-8), STR_SPLIT a certaines limites, et il est plus approprié d'utiliser MB_STR_SPLIT . Cet article explorera les différences entre les deux fonctions et dans quelles circonstances MB_STR_SPLIT devrait être sélectionné au lieu de STR_SPLIT .
Tout d'abord, passons rapidement en revue les fonctions de base et l'utilisation de STR_SPLIT et MB_STR_SPLIT .
str_split : utilisé pour diviser une chaîne en un tableau de longueur spécifiée. Il s'agit d'une fonction de manipulation de chaîne intégrée dans PHP, adaptée aux jeux de caractères ASCII et ne peut pas gérer correctement les caractères multi -yte.
Exemple:
$str = "Hello World";
$result = str_split($str, 2); // retour:['He', 'll', 'o ', 'Wo', 'rl', 'd']
MB_STR_SPLIT : est une fonction dans l'extension de chaîne multi-octe (MBSTRING) utilisée pour diviser les chaînes par caractère, et peut gérer correctement UTF-8 ou un autre codage de caractères multi-octets.
Exemple:
$str = "Bonjour,monde";
$result = mb_str_split($str, 1); // retour:['toi', 'bien', ',', 'monde', 'limite']
L'un des principaux problèmes de la fonction STR_SPLIT est qu'il ne prend pas en charge les jeux de caractères multi -yte. Par exemple, dans le codage UTF-8, un caractère chinois occupe plusieurs octets, et STR_SPLIT divise la chaîne par octets, pas les caractères. Cela ne le fait pas traiter correctement les chaînes contenant des caractères mulabyte (tels que des caractères chinois, des caractères japonais, etc.).
Considérez l'exemple suivant:
$str = "Bonjour";
$result = str_split($str, 1);
print_r($result);
La sortie peut être:
Array
(
[0] => "toi"
[1] => "bien"
)
Bien que cela ne semble aucun problème, Str_Split divise la chaîne par octet plutôt que par le caractère. Si un caractère multi-gytet est inclus dans la chaîne, STR_SPLIT peut entraîner des résultats inutiles brouillés ou incorrects.
MB_STR_SPLIT est conçu spécifiquement pour les jeux de caractères multi -yte. Il reconnaît et divise correctement les caractères multilingue, qu'il s'agisse de UTF-8, de GBK ou d'autres encodages de caractères. En utilisant MB_STR_SPLIT , nous pouvons nous assurer que la chaîne est divisée par caractère plutôt que par octets.
Continuez à regarder l'exemple ci-dessus:
$str = "Bonjour";
$result = mb_str_split($str, 1);
print_r($result);
Le résultat de la sortie est:
Array
(
[0] => "toi"
[1] => "bien"
)
À l'heure actuelle, MB_STR_SPLIT peut diviser correctement la chaîne en un tableau de caractères et d'éléments, sans problèmes de segmentation au niveau des octets.
Si votre projet implique des jeux de caractères mulabyte (tels que UTF-8 chinois, japonais ou coréen encodés UTF-8, etc.), vous devez utiliser MB_STR_SPLIT lors de la division des chaînes. En particulier dans les scénarios où la saisie de l'utilisateur, le stockage de données ou le contenu multilingue sont liés, l'utilisation de STR_SPLIT peut apporter des problèmes inutiles.
Voici quelques scénarios, il est recommandé d'utiliser MB_STR_SPLIT :
Traiter le contenu multilingue : comme les jeux de caractères chinois, japonais, coréens et autres octets.
Entrée de l'utilisateur : le texte entré par l'utilisateur peut contenir des caractères multi -yte, il est donc plus sûr d'utiliser MB_STR_SPLIT .
Encodage de chaîne Conversion : lorsque vous devez convertir le codage des caractères et les chaînes de partage par des caractères, MB_STR_SPLIT peut mieux assurer la compatibilité.
Bien que MB_STR_SPLIT assure une meilleure compatibilité lorsqu'il s'agit de caractères multi -yte, ses performances sont légèrement pires que STR_SPLIT car elle nécessite de gérer le codage des caractères et des caractères multi-gytets. Des tests de performances et une optimisation peuvent être nécessaires pour le traitement des chaînes à grande échelle, en particulier lorsque de grandes quantités de données texte sont impliquées.
Pour les chaînes ASCII simples, STR_SPLIT peut être plus efficace, mais s'il existe une exigence pour les caractères multi-octets, l'utilisation de MB_STR_SPLIT est une option plus sûre.
str_split : fonctionne avec les chaînes ASCII et ne peut pas gérer correctement les caractères multi -yte.
MB_STR_SPLIT : Convient aux jeux de caractères multi -yte (tels que le codage UTF-8), qui peut traiter correctement les chaînes contenant des caractères multi-gytets.
Lorsque vous devez gérer les jeux de caractères multi -yte, vous devez hiérarchiser l'utilisation de MB_STR_SPLIT pour éviter les erreurs ou les incohérences causées par les problèmes d'encodage. Si vous êtes sûr que votre chaîne ne contient que des caractères à un octet, STR_SPLIT est une option plus légère.
J'espère que cet article vous aidera à comprendre comment choisir la bonne fonction divisée dans le traitement de chaîne multi -yte.