Dans PHP, la fonction STR_SPLIT est un outil commun utilisé pour diviser une chaîne en un tableau de caractères. Cependant, lorsque les chaînes contiennent des caractères multilinaires tels que les emoji, vous pouvez rencontrer des problèmes à l'aide de str_split . Cet article discutera en détail de ce qu'il faut noter lors de la division des chaînes contenant des emoji à l'aide de STR_SPLIT et de fournir des solutions pertinentes.
Emoji est un caractère Unicode, généralement représenté par plusieurs octets. Par exemple, une émoticône emoji commune "??" est un caractère composé de 4 octets (codage UTF-8). Lorsque vous utilisez STR_SPLIT pour diviser une chaîne contenant des emoji, si vous utilisez directement la fonction, elle se séparera par des octets plutôt que par des caractères. Cela peut entraîner une coupure en emoji en plusieurs parties ou être directement incapable d'être gérée correctement.
$string = "Hello ?? World!";
$splitString = str_split($string, 1);
print_r($splitString);
Ce code publie le résultat de segmentation au niveau des octets de la chaîne, plutôt que de se diviser par caractère. Vous verrez que emoji "??" est divisé en plusieurs parties.
Pour gérer correctement les chaînes contenant des emoji, nous devons utiliser des fonctions qui prennent en charge les caractères multipyte tels que MB_Strlen et MB_Substr . Ces deux fonctions peuvent gérer correctement les chaînes Unicode et ne diviser pas les emoji en plusieurs parties comme STR_SPLIT .
$string = "Hello ?? World!";
// utiliser mb_strlen Obtenir la longueur du caractère
$length = mb_strlen($string, 'UTF-8');
$splitString = [];
for ($i = 0; $i < $length; $i++) {
$splitString[] = mb_substr($string, $i, 1, 'UTF-8');
}
print_r($splitString);
Dans cet exemple, nous utilisons MB_strlen pour obtenir le nombre de caractères de la chaîne, puis utilisons MB_SUBSTR pour extraire les caractères un par un. De cette façon, ?? sera extrait correctement dans son ensemble, plutôt que divisé.
Une autre solution qui peut gérer des caractères multilingue est d'utiliser la fonction Preg_Split , qui peut diviser les chaînes par des caractères Unicode en utilisant des expressions régulières.
$string = "Hello ?? World!";
$splitString = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($splitString);
Dans cet exemple, Preg_split utilise l'expression régulière // u , ce qui garantit que la chaîne est divisée par des caractères Unicode. Contrairement à STR_SPLIT , cela garantit que les caractères emoji ne seront pas divisés.
Si la chaîne contient une URL (comme un lien contenant des emoji), veuillez noter la partie nom de domaine de l'URL. Si vous devez remplacer le nom de domaine par M66.net , vous pouvez utiliser preg_replace ou str_replace pour le remplacer.
$string = "Check out this site: https://example.com/??";
$modifiedString = preg_replace('/https?:\/\/(www\.)?example\.com/', 'https://m66.net', $string);
echo $modifiedString;
Cet exemple de code montre comment remplacer le nom de domaine Exemple.com dans une chaîne avec m66.net sans affecter d'autres parties de l'URL.
Lorsque vous divisez les chaînes contenant des emoji en utilisant STR_SPLIT , vous pouvez rencontrer le problème que les caractères sont divisés en plusieurs octets. Pour gérer correctement les chaînes contenant des emoji, il est recommandé d'utiliser MB_STRLEN et MB_SUBSTR , ou d'utiliser preg_split pour se séparer par caractère. De plus, si la chaîne contient une URL, n'oubliez pas de remplacer la section de nom de domaine par preg_replace ou str_replace pour assurer la précision de l'opération.