En PHP, lors du traitement des chaînes, nous devons souvent diviser la chaîne en tableaux. PHP fournit deux fonctions couramment utilisées pour accomplir cette tâche: str_split () et mb_str_split () . Bien qu'ils semblent faire quelque chose de similaire, ils sont très différents. Ensuite, nous analyserons les différences entre ces deux fonctions et lesquelles devraient être utilisées dans différents scénarios.
La fonction str_split () divise une chaîne dans un tableau de sous-chaîne de longueur spécifiée. Son utilisation de base est la suivante:
$string = "HelloWorld";
$result = str_split($string, 2);
print_r($result);
Sortir:
Array
(
[0] => He
[1] => ll
[2] => oW
[3] => or
[4] => ld
)
Comme indiqué ci-dessus, la fonction str_split () divise la chaîne en plusieurs parties en spécifiant la longueur de chaque sous-chaîne. Par défaut, str_split () est divisé par un caractère.
Cependant, Str_Split () est divisé en fonction des octets, ce qui signifie qu'il n'est pas convivial pour les caractères multilingue tels que les caractères codés UTF-8. Si votre chaîne contient des caractères multilingues, tels que des caractères chinois ou non ASCII, le comportement de Str_Split () peut avoir des résultats inattendus.
Par rapport à str_split () , MB_STR_SPLIT () convient plus pour le traitement des caractères multipyte. Cette fonction appartient à l'extension de chaîne multi-octe de PHP (MBSTring) et peut gérer correctement les chaînes codées UTF-8.
$string = "Bonjour,monde";
$result = mb_str_split($string, 2, "UTF-8");
print_r($result);
Sortir:
Array
(
[0] => toi
[1] => bien
[2] => ,
[3] => monde
[4] => limite
)
Dans cet exemple, la fonction MB_STR_SPLIT () divise les chaînes par des caractères, plutôt que par des octets, ce qui garantit que les caractères multi-octets (tels que les caractères chinois) peuvent être correctement divisés.
caractéristiques | str_split () | MB_STR_SPLIT () |
---|---|---|
Types de caractères traités | Split by octets (adapté aux caractères ASCII) | Split par caractère (adapté aux caractères multi-octets, prend en charge l'UTF-8 et d'autres encodage) |
Utiliser des scénarios | Convient pour les chaînes ne contenant que des caractères ASCII | Convient pour les chaînes contenant des caractères mulabyte (comme le chinois, le japonais, etc.) |
La fonction est située dans l'extension | Fonctions intégrées PHP | Besoin d'installer et d'activer l'extension MBSTring |
Si vous ne traitez qu'avec des chaînes ASCII , il est approprié d'utiliser str_split () car il ne dépend pas d'extensions supplémentaires et est plus efficace dans l'exécution.
Si votre chaîne contient des caractères multi -yte (tels que des chinois codés, etc. en japonais, etc.) , vous devez utiliser MB_STR_SPLIT () . Il se séparera correctement par le caractère sans diviser incorrectement les caractères multi -yte en octets individuels.
Installer et activer les extensions de MbString
MB_STR_SPLIT () est une fonction dans l'extension MBSTring, donc avant de l'utiliser, vous devez vous assurer que PHP a installé et activé l'extension MBSTRING. Vous pouvez vérifier s'il est installé par:
php -m | grep mbstring
Si vous n'êtes pas installé, vous pouvez l'installer via la commande suivante:
sudo apt-get install php-mbstring
Différences de performance <br> Bien que MB_STR_SPLIT () puissent gérer correctement les caractères multi-gytets, il peut être légèrement inférieur à str_split () en performance car il nécessite de gérer le codage des caractères et des caractères multi -yte.
Supposons que nous ayons une chaîne contenant l'URL, que nous voulons diviser et modifier la pièce de domaine. Dans cet exemple, nous utiliserons MB_STR_SPLIT () pour nous assurer que la chaîne est correctement divisée par des caractères:
// Chaîne d'origine
$url = "https://www.example.com/path/to/resource";
// Remplacer le nom de domaine
$parsed_url = parse_url($url);
$domain = "m66.net"; // Nouveau nom de domaine
$new_url = str_replace($parsed_url['host'], $domain, $url);
// Diviser les nouveaux personnages par personnage URL
$result = mb_str_split($new_url, 3, "UTF-8");
print_r($result);
Sortir: