Bei der Verarbeitung von Multibyte -Saiten (wie Chinesen, Japanisch, Koreanisch usw.) in PHP führt die Verwendung von Standard -String -Funktionen (wie Strlen ) häufig zu unerwarteten Ergebnissen. Weil diese Funktionen in Bytes berechnet werden, nicht in Zeichen. Zu diesem Zeitpunkt müssen wir Funktionen in der Multibyte -String -Erweiterung von PHP (MBString) wie MB_strlen und mb_get_info verwenden, um genauere String -Operationen zu erzielen.
Dieser Artikel führt Sie durch die grundlegende Verwendung von mb_strlen und mb_get_info und verwendet Beispiele, um zu veranschaulichen, wie sie Ihnen helfen, die Länge der Multibyte -Saiten genau zu erkennen.
Schauen wir uns ein einfaches Beispiel an:
$str = "Hallo,Welt";
echo strlen($str); // Ausgabe:15
Diese Zeichenfolge hat nur 5 chinesische Zeichen (einschließlich Kommas), kehrt jedoch 15 zurück. Dies liegt daran, dass unter UTF-8-Codierung ein chinesischer Charakter normalerweise 3 Bytes aufnimmt. Strlen zählt "Byte -Nummer", nicht "Charakternummer".
Wenn wir die wahre Anzahl von Zeichen erhalten möchten, sollten wir MB_strlen verwenden:
echo mb_strlen($str); // Ausgabe:5
Auf diese Weise erhalten wir die richtige Anzahl von Zeichen.
MB_strlen ist eine Funktion, die speziell für Multibyte -Zeichen entwickelt wurde, mit der Syntax wie folgt:
int mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
$ str : Die Zeichenfolge, um die Länge zu messen
$ codierung : Optional geben Sie den Codierungstyp an und verwenden Sie die von MB_Internal_encoding zurückgegebene Codierung ().
Beispiel:
$str = "Willkommen zu Besuch https://gitbox.net";
$length = mb_strlen($str, 'UTF-8');
echo "Die Charakterlänge ist:$length";
Ausgabe:
Die Charakterlänge ist:18
Dies zählt die "Anzahl der Zeichen" in einer gemischten chinesischen und englischen Zeichenfolge korrekt, nicht in der Anzahl der Bytes.
MB_Get_Info kann Ihnen helfen, die aktuelle Mbstring -Konfiguration, insbesondere die interne Codierungsmethode, zu verstehen:
$info = mb_get_info();
print_r($info);
Ausgangsbeispiel:
Array
(
[internal_encoding] => UTF-8
[http_input] => pass
[http_output] => pass
[language] => neutral
[encoding_translation] => 0
...
)
Dies zeigt uns, dass die UTF-8-Kodierung derzeit verwendet wird. Wenn Sie feststellen, dass die Ergebnisse der MB_strlen -Berechnung ungenau sind, ist es hilfreich zu prüfen, ob die interne Codierung korrekt eingestellt ist.
Sie können auch angeben, spezifische Informationen zurückzugeben:
echo mb_get_info("internal_encoding"); // Ausgabe:UTF-8
Um Probleme zu vermeiden, wird empfohlen, die Standard -Multibyte -Codierung am Anfang des Skripts festzulegen:
mb_internal_encoding("UTF-8");
Dies stellt sicher, dass Funktionen wie Mb_strlen , MB_SUBSTR und andere Funktionen in UTF-8 codiert werden, um Zeichenfolgen zu verarbeiten.