Parlez de la différence entre strlen et mb_strlen en PHP

青灯夜游
Libérer: 2023-04-08 14:20:01
original
2332 Les gens l'ont consulté

Parlez de la différence entre strlen et mb_strlen en PHP

En PHP, strlen et mb_strlen sont des fonctions permettant de trouver la longueur d'une chaîne, mais pour certains débutants, s'ils ne lisent pas le manuel, ils risquent de ne pas comprendre la différence . La différence entre les deux est expliquée ci-dessous à travers des exemples.

Regardez d'abord l'exemple :

<?php  
//测试时文件的编码方式要是UTF8  
$str=&#39;中文a字1符&#39;;  
echo strlen($str).&#39;<br>&#39;;//14  
echo mb_strlen($str,&#39;utf8&#39;).&#39;<br>&#39;;//6  
echo mb_strlen($str,&#39;gbk&#39;).&#39;<br>&#39;;//8  
echo mb_strlen($str,&#39;gb2312&#39;).&#39;<br>&#39;;//10  
?>
Copier après la connexion

Analyse des résultats : lors du calcul de strlen, un caractère chinois UTF8 est traité comme 3 longueurs, donc la longueur de "Chinois un caractère 1 caractère" est de 3* 4+ 2=14. Lors du calcul de mb_strlen, si le code interne est sélectionné comme UTF8, un caractère chinois sera calculé comme une longueur de 1, donc la longueur du « caractère chinois 1 caractère » est 6.

Utilisez ces deux fonctions Une fonction peut calculer conjointement l'occupation d'une chaîne mixte chinoise et anglaise (l'occupation d'un caractère chinois est 2 et l'occupation d'un caractère anglais est 1)

echo (strlen($str) + mb_strlen($str,&#39;UTF8&#39;)) / 2;
Copier après la connexion

Par exemple, "Chinois un caractère 1 caractère" La valeur de strlen($str) est 14 et la valeur de mb_strlen($str) est 6. Ensuite, on peut calculer que l'espace réservé de "Chinois un caractère 1 caractère" est 10.

echo mb_internal_encoding();
Copier après la connexion

La fonction de longueur de chaîne intégrée de PHP strlen Ne gère pas correctement les chaînes chinoises, tout ce qu'elle obtient est le nombre d'octets occupés par la chaîne. Pour l'encodage chinois GB2312, la valeur obtenue par strlen est le double du nombre de caractères chinois, tandis que pour le chinois encodé en UTF-8, la différence est de trois fois (sous l'encodage UTF-8, un caractère chinois occupe 3 octets).

L'utilisation de la fonction mb_strlen peut mieux résoudre ce problème. L'utilisation de mb_strlen est similaire à strlen, sauf qu'il possède un deuxième paramètre facultatif pour spécifier le codage des caractères. Par exemple, pour obtenir la longueur $str de la chaîne UTF-8, vous pouvez utiliser mb_strlen($str,'UTF-8'). Si le deuxième paramètre est omis, l'encodage interne de PHP sera utilisé. L'encodage interne peut être obtenu via la fonction mb_internal_encoding().

Il convient de noter que mb_strlen n'est pas une fonction principale de PHP Avant de l'utiliser, vous devez vous assurer que php_mbstring.dll est chargé dans php.ini, c'est-à-dire vous assurer que la ligne "extension". =php_mbstring.dll" existe et n'a pas été commenté. , sinon le problème d'une fonction non définie se produira.

Apprentissage recommandé : Tutoriel vidéo PHP

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal