Heim  >  Artikel  >  Backend-Entwicklung  >  Berechnung der PHP-Stringlänge – Einführung in die Verwendung der Funktion strlen()

Berechnung der PHP-Stringlänge – Einführung in die Verwendung der Funktion strlen()

高洛峰
高洛峰Original
2017-01-05 11:45:341898Durchsuche

Funktion strlen() und Funktion mb_strlen()

In PHP gibt die Funktion strlen() die Länge der Zeichenfolge zurück. Der Funktionsprototyp lautet wie folgt:

int strlen(string string_input);

Der Parameter string_input ist der zu verarbeitende String.

Die Funktion strlen() gibt die von der Zeichenfolge belegte Bytelänge zurück. Ein englischer Buchstabe, eine Zahl und verschiedene Symbole belegen alle ein Byte und ihre Länge beträgt 1. Ein Mittagszeichen belegt zwei Bytes, daher beträgt die Länge eines Mittagszeichens 2. Beispiel:

<?php 
echo strlen("www.php.cn"); 
echo strlen("PHP中文网"); 
?>

Das laufende Ergebnis von „echo strlen(“www.php.cn“);“: 15 Das laufende Ergebnis von

“echo strlen(“PHP Chinese Network ");" :15

Hier ist eine Frage: Besetzt ein chinesisches Zeichen nicht 2 Bytes? „Sanzhi Development Network“ hat eindeutig fünf chinesische Schriftzeichen, wie könnte das Ergebnis also 15 sein?

Der Grund ist folgender: Bei der Berechnung von strlen() wird ein chinesisches UTF-8-Zeichen so behandelt, als hätte es eine Länge von 3. Wie kann die Länge der Zeichenfolge genau berechnet werden, wenn Chinesisch und Englisch gemischt sind? Hier muss eine weitere Funktion mb_strlen() eingeführt werden. Die Verwendung der Funktion mb_strlen() ist fast die gleiche wie strlen(), außer dass es einen zusätzlichen Parameter gibt, der die Zeichensatzkodierung angibt. Der Funktionsprototyp lautet:

int mb_strlen(string string_input, string encode);

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). Daher kann der folgende Code die Länge chinesischer Zeichenfolgen genau berechnen:

<?php 
$str = "三知sunchis开发网"; 
echo strlen($str)."<br>"; //结果:22 
echo mb_strlen($str,"UTF8")."<br>"; //结果:12 
$strlen = (strlen($str)+mb_strlen($str,"UTF8"))/2; 
echo $strlen; //结果:17 
?>

Prinzipielle Analyse: Bei der Berechnung von

strlen() beträgt die Länge der in UTF-8 behandelten chinesischen Zeichen 3 Daher beträgt die Länge von „Sanzhi Sunchis Development Network“ 5×3+7×1=22
Wenn bei der Berechnung von mb_strlen der interne Code als UTF8 ausgewählt wird, wird ein chinesisches Zeichen mit einer Länge von 1 berechnet. also beträgt die Länge des „Sanzhi sunchis Development Network“ 5×1+7×1=12

Der Rest ist ein rein mathematisches Problem, daher werde ich hier nicht auf Details eingehen...

Hinweis: Wenn für mb_strlen ($str,'UTF-8') 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., dass die Zeile „extension=php_mbstring.dll“ vorhanden ist und ist nicht auskommentiert, sonst liegt ein undefiniertes Funktionsproblem vor.

Weitere PHP-Stringlängenberechnungen – Einführung in die Verwendung der strlen()-Funktion und verwandte Artikel finden Sie auf der chinesischen PHP-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