Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen strlen und mb_strlen in PHP

Der Unterschied zwischen strlen und mb_strlen in PHP

藏色散人
藏色散人nach vorne
2019-09-24 09:40:112535Durchsuche

Gemeinsame Funktionen zur Berechnung der Stringlänge in PHP sind: strlen und mb_strlen. Wenn es sich bei allen Zeichen um englische Zeichen handelt, sind die beiden gleich. Hier vergleichen wir hauptsächlich die beiden Berechnungsergebnisse, wenn Chinesisch und Englisch gemischt werden.

In PHP sind strlen und mb_strlen Funktionen zum Ermitteln der Länge eines Strings, aber einigen Anfängern ist der Unterschied möglicherweise nicht klar, ohne das Handbuch zu lesen.

Im Folgenden wird anhand von Beispielen der Unterschied zwischen den beiden erläutert.

Schauen Sie sich zuerst das Beispiel an:

<?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
?>

Ergebnisanalyse:

Bei der Berechnung von strlen wird ein chinesisches GBK-Zeichen als 2 Längen behandelt, also „Chinesisches a-Zeichen 1 Zeichen“ Die Länge beträgt 2*4+2=10. Bei der Berechnung von mb_strlen wird ein chinesisches Zeichen als Zeichenlänge behandelt, wenn der interne Code gbk ist.

Mit diesen beiden Funktionen können Sie gemeinsam die Belegung einer gemischten chinesischen und englischen Zeichenfolge berechnen (die Belegung eines chinesischen Zeichens beträgt 2 und die Belegung eines englischen Zeichens beträgt 1)

echo (strlen($str) + mb_strlen($str,&#39;UTF8&#39;)) / 2;

Wenn beispielsweise der strlen($str)-Wert von „Chinesisch ein Zeichen 1 Zeichen“ 10 und der mb_strlen($str)-Wert 6 ist, kann berechnet werden, dass der Platzhalter von „Chinesisch ein Zeichen 1 Zeichen“ ist 10.

echo mb_internal_encoding();

Die in PHP integrierte String-Längenfunktion strlen kann chinesische Strings nicht korrekt verarbeiten. Sie ermittelt nur die Anzahl der von dem String belegten Bytes. Bei der GB2312-Codierung für Chinesisch beträgt der von strlen erhaltene Wert das Doppelte der Anzahl chinesischer Zeichen, während für UTF-8-codiertes Chinesisch der Unterschied dreimal beträgt (bei UTF-8-Codierung belegt ein chinesisches Zeichen 3 Bytes).

Die Verwendung der Funktion mb_strlen kann dieses Problem besser lösen. Die Verwendung von mb_strlen ähnelt strlen, außer dass es einen zweiten optionalen Parameter zur Angabe der Zeichenkodierung hat. Um beispielsweise die Länge der UTF-8-Zeichenfolge $str zu ermitteln, können Sie mb_strlen($str,'UTF-8') verwenden.

Wenn der zweite Parameter weggelassen wird, wird die interne Kodierung von PHP verwendet. Die interne Kodierung kann über die Funktion mb_internal_encoding() abgerufen werden.

Es ist zu beachten, dass mb_strlen keine Kernfunktion von PHP ist. Bevor Sie es verwenden, müssen Sie sicherstellen, dass php_mbstring.dll in php.ini geladen ist, d. h. sicherstellen, dass die Zeile „extension =php_mbstring.dll" existiert und wurde nicht auskommentiert. Andernfalls tritt das Problem einer undefinierten Funktion auf.

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen strlen und mb_strlen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen