Maison >développement back-end >Problème PHP >Comment intercepter des chaînes avec php sans caractères tronqués
En PHP, si la fonction substr() intercepte une chaîne chinoise, des caractères tronqués peuvent apparaître car le nombre d'octets occupés par un octet dans les caractères chinois et occidentaux est différent.
Le paramètre de longueur de substr est calculé en octets lors de l'encodage en GB2312, un caractère chinois occupe 2 octets et l'anglais occupe 1 octet tandis qu'en encodage UTF-8, un caractère chinois peut occuper 2 ou 3 octets, et une ponctuation anglaise ou demi-chasse peut occuper 1 octet. (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)
L'utilisation directe de la fonction PHP substr pour intercepter les caractères chinois peut provoquer des caractères tronqués, principalement parce que substr peut convertir de force un caractère chinois "Scie" en deux. Solution :
1. Utilisez l'interception mb_substr de la bibliothèque d'extension mbstring pour éviter les caractères tronqués.
2. Écrivez vous-même la fonction d'interception, mais l'efficacité n'est pas aussi élevée que l'utilisation de la bibliothèque d'extension mbstring.
3. S'il s'agit simplement de sortir la chaîne interceptée, elle peut être implémentée de la manière suivante : substr($str, 0, 30).chr(0).
La fonction substr() peut diviser du texte, mais si le texte à diviser comprend des caractères chinois, vous rencontrerez souvent des problèmes. Dans ce cas, vous pouvez utiliser la fonction mb_substr()/mb_strcut.
L'utilisation de mb_substr()/mb_strcut est similaire à substr(), sauf qu'un paramètre supplémentaire doit être ajouté à la fin de mb_substr()/mb_strcut pour définir l'encodage de la chaîne, mais la plupart des serveurs n'ouvrez pas php_mbstring.dll, vous devez ouvrir php_mbstring.dll dans php.ini.
Par exemple :
<?php echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
Sortie : Par ici mon mot
<?php echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
Sortie : Par ici 1
Comme le montre l'exemple ci-dessus, mb_substr divise les caractères par mots, tandis que mb_strcut divise les caractères par octets, mais aucun ne produira un demi-caractère.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!