Maison  >  Article  >  développement back-end  >  La différence entre strlen et mb_strlen en PHP

La différence entre strlen et mb_strlen en PHP

藏色散人
藏色散人avant
2019-09-24 09:40:112536parcourir

Les fonctions courantes pour calculer la longueur d'une chaîne en PHP sont : strlen et mb_strlen Lorsque les caractères sont tous des caractères anglais, les deux sont identiques. Ici, nous comparons principalement les deux résultats de calcul lorsque le chinois et l'anglais sont mélangés.

En PHP, strlen et mb_strlen sont des fonctions permettant de trouver la longueur d'une chaîne, mais pour certains débutants, ils peuvent ne pas comprendre la différence sans lire le manuel.

Ce qui suit utilise des exemples pour expliquer la différence entre les deux.

Regardez d'abord l'exemple :

<?php  
//测试时文件的编码方式为gbk
$str=&#39;中文a字1符&#39;;  
echo strlen($str).&#39;<br>&#39;;//10 
echo mb_strlen($str,&#39;utf8&#39;).&#39;<br>&#39;;//7  
echo mb_strlen($str,&#39;gbk&#39;).&#39;<br>&#39;;//6  
echo mb_strlen($str,&#39;gb2312&#39;).&#39;<br>&#39;;//6 
echo mb_strlen($str).&#39;<br>&#39;;//10
?>

Analyse des résultats :

Lors du calcul de strlen, un caractère chinois gbk est traité comme 2 longueurs, donc "Chinois un caractère 1 caractère" La longueur est de 2*4+2=10. Lors du calcul de mb_strlen, lorsque le code interne est gbk, un caractère chinois sera traité comme une longueur de caractère.

En utilisant ces deux fonctions, vous pouvez 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;

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

echo mb_internal_encoding();

La fonction de longueur de chaîne intégrée de PHP, strlen, ne peut pas gérer correctement les chaînes chinoises. Elle obtient uniquement 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 de fonction non définie se produira.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer