Maison >développement back-end >Problème PHP >Comment intercepter des chaînes avec php sans caractères tronqués

Comment intercepter des chaînes avec php sans caractères tronqués

(*-*)浩
(*-*)浩original
2019-09-25 10:42:312764parcourir

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.

Comment intercepter des chaînes avec php sans caractères tronqués

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(&#39;这样一来我的字符串就不会有乱码^_^&#39;, 0, 7, &#39;utf-8&#39;);
?>

Sortie : Par ici mon mot

<?php
echo mb_strcut(&#39;这样一来我的字符串就不会有乱码^_^&#39;, 0, 7, &#39;utf-8&#39;);
?>

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn