Heim >Backend-Entwicklung >PHP-Tutorial >Kennen Sie den Unterschied zwischen strlen und mb_strlen in PHP?

Kennen Sie den Unterschied zwischen strlen und mb_strlen in PHP?

怪我咯
怪我咯Original
2017-07-13 14:48:031682Durchsuche

Allgemeine Funktionen zur Berechnung der Länge von String in PHP sind: strlen und mb_strlen. Wenn es sich bei den Zeichen ausschließlich um englische Zeichen handelt, sind die beiden gleich. Hier vergleichen wir hauptsächlich die beiden Berechnungsergebnisse, wenn Chinesisch und Englisch gemischt werden.

Strlen und mb_strlen sind Funktionen zum Ermitteln der Länge eines Strings.

Die Funktion strlen() gibt die Länge des Strings zurück. Wenn die Zeichenfolge leer ist, wird 0 zurückgegeben.

mb_strlen – Ermitteln Sie die Länge der Zeichenfolge,

Syntax

mb_strlen ($str, $encoding)

str Die Zeichenfolge zum Überprüfen der Länge.

Kodierung Der Parameter ist die Zeichenkodierung. Wenn es weggelassen wird, wird die interne Zeichenkodierung verwendet.

Rückgabewert

Gibt die Anzahl der in der Zeichenfolge str enthaltenen Zeichen mit Kodierung kodiert zurück. Multibyte-Zeichen werden als 1 gezählt.

Gibt FALSE zurück, wenn die angegebene Codierung ungültig ist.

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

Sehen Sie sich zuerst das Beispiel an:

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

Ergebnisanalyse: Bei der Berechnung von strlen wird ein chinesisches UTF8-Zeichen als 3 Längen behandelt, sodass die Länge von „Chinesisch ein Zeichen 1“ beträgt Zeichen" Es ist 3*4+2=14. Wenn bei der Berechnung von mb_strlen der interne Code als UTF8 ausgewählt ist, wird ein chinesisches Zeichen mit einer Länge von 1 berechnet, sodass die Länge von „Chinesisches Zeichen 1 Zeichen“ 6 beträgt .

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;

Zum Beispiel: „Der strlen($str)-Wert von „Chinesisch ein Zeichen 1 Zeichen“ ist 14 und der mb_strlen($str)-Wert ist 6. Es kann berechnet werden, dass der Platzhalter von „Chinesisch ein Zeichen 1 Zeichen“ ist " ist 10.

echo mb_internal_encoding();

Die in PHP integrierte String-Längenfunktion strlen kann chinesische Strings nicht korrekt verarbeiten. Sie ruft nur die Anzahl der von dem String belegten Bytes ab. 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. Stellen Sie sicher, dass „extension=php_mbstring.dll“ eine Zeile existiert und nicht kommentiert ist, sonst tritt ein undefiniertes Funktionsproblem auf.

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn