Aktueller Standort: Startseite> Neueste Artikel> Byte- und Charakterprobleme in Mb_Strcut, der Unterschied, den Sie wissen müssen

Byte- und Charakterprobleme in Mb_Strcut, der Unterschied, den Sie wissen müssen

gitbox 2025-05-26

In der PHP-Entwicklung ist die Verarbeitung von Multibyte-Zeichenfolgen eine häufige und fehleranfällige Verbindung. Vor allem, wenn es darum geht, Zeichenfolgen abzufangen, wird die MB_strcut -Funktion häufig anstelle von Substr verwendet, um verstümmelte Probleme beim Abfangen von Multibyte -Zeichen zu vermeiden. Viele Entwickler haben jedoch Zweifel an dem Unterschied zwischen Bytes und Zeichen in MB_Strcut . In diesem Artikel wird die Unterschiede zwischen den beiden im Detail analysiert, um die Funktion besser zu verstehen und zu verwenden.

1. Einführung in die Funktion MB_STRCUT

MB_STRCUT ist eine Funktion in der Mbstring der Php Multibyte String Function Library, mit der Teil einer Zeichenfolge abgefangen wird.

 string mb_strcut ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
  • $ str : String eingeben

  • $ start : Die Startposition ist Byte (Byte)

  • $ Länge : Abfangen die Länge, das Gerät ist auch Bytes (optional)

  • $ codierung : String -Codierung, Standard für interne Codierung

2. Der Unterschied zwischen Bytes und Charakteren

  • Byte : Die grundlegende Datenspeichereinheit in einem Computer, 1 Byte = 8 Bit. Ein Byte kann einen englischen Charakter darstellen, aber für chinesische Charaktere oder andere Multi-Byte-Zeichen sind häufig mehrere Bytes erforderlich.

  • Charakter : Bezieht sich auf ein vollständiges "Symbol", unabhängig davon, wie viele Bytes es besetzt.

Beispielsweise macht bei der UTF-8-Codierung ein chinesischer Charakter normalerweise 3 Bytes aus, während ein englischer Charakter 1 Byte ausmacht.

3. MB_STRCUT Abschnitt in Bytes

Der wichtigste Punkt von mb_strcut ist, dass seine $ start- und $ Länge -Parameter beide in Bytes sind, die sich von anderen Funktionen unterscheiden (z. B. MB_SUBSTR ), die in Zeichen enthalten sind.

Dies bedeutet, dass wenn Sie 5 Zeichen ab dem dritten Zeichen abfangen möchten, und die Verwendung von Mb_Strcut die Berechnung der Anzahl der von jedem Zeichen besetzten Bytes erfordert. Die direkte Verwendung von Charakterindizieren führt direkt zu Abfangenfehlern und sogar zu einem halben Multi-Byte-Zeichen, was zu verstümmelten Code führt.

4. Warum mb_strcut verwenden?

Der Vorteil von mb_strcut besteht darin, dass der mittlere Teil des Multi-Byte-Zeichens nicht abgeschnitten wird. Beim Abfangen stellt MB_STRCUT die Grenze automatisch ein, um einen Abfall eines Teils der Zeichen zu vermeiden und verhindern, dass die Ausgabe verstümmelter Code ausgibt.

Zum Beispiel:

 <?php
$str = "Hallo,world!"; // "Hallo"Zwei chinesische Charaktere,Die Englisch- und Ausrufezeichen werden verfolgt
echo mb_strcut($str, 0, 6, "UTF-8"); 
?>

Im obigen Code ist die 6 -Byte -Länge genau die Anzahl der Bytes der beiden chinesischen Zeichen "Sie" und "gut" (3 Bytes pro chinesischem Charakter). Mb_Strcut wird diese beiden chinesischen Zeichen korrekt abfangen, ohne die Hälfte des Charakters auszuschneiden.

Wenn Sie die Substr- oder Intercept -Funktion in Zeichen verwenden, können Bytes abgeschnitten werden, um einen verstümmelten Code zu verursachen.

5. Berechnungsbeispiel für Byteeinheiten

Nach dem Verständnis der Byte -Einheiten von mb_strcut können wir mb_strlen und mb_substr verwenden, um die Anzahl der Bytes zu berechnen. Zum Beispiel:

 <?php
$str = "Hallo,world!";
$encoding = "UTF-8";
for ($i = 0; $i < mb_strlen($str, $encoding); $i++) {
    $char = mb_substr($str, $i, 1, $encoding);
    $byteLen = strlen(mb_convert_encoding($char, "UTF-8", $encoding));
    echo "Charakter {$char} Anzahl der besetzten Bytes: {$byteLen}\n";
}
?>

Ausgabe:

 Charakter Du Anzahl der besetzten Bytes: 3
Charakter Gut Anzahl der besetzten Bytes: 3
Charakter , Anzahl der besetzten Bytes: 3
Charakter w Anzahl der besetzten Bytes: 1
Charakter o Anzahl der besetzten Bytes: 1
Charakter r Anzahl der besetzten Bytes: 1
Charakter l Anzahl der besetzten Bytes: 1
Charakter d Anzahl der besetzten Bytes: 1
Charakter ! Anzahl der besetzten Bytes: 3

Dies zeigt an, dass der Multibyte-Charakter in UTF-8 mehrere Bytes einnimmt.

6. Wählen Sie Mb_strcut oder Mb_substr?

  • Wenn Sie Strings basierend auf der Bytelänge abschneiden und verhindern möchten, dass Multi-Byte-Zeichen in der Mitte abgeschnitten werden, sollten Sie MB_STRCUT verwenden.

  • Wenn Sie eine Zeichenfolge abfangen möchten, die auf der Anzahl der Zeichen basiert (unabhängig davon, wie viele Bytes jedes Zeichen benötigt), sollten Sie MB_SUBSTR verwenden.

7. Dinge zu beachten

  • Stellen Sie sicher, dass Sie die richtige Codierung angeben, andernfalls kann die Byte -Berechnung Fehler sein.

  • Bei Netzwerkübertragung, Datenbankspeicher oder Dateioperationen ist die Byte -Länge der Zeichenfolgen oft wichtiger als die Charakterdauer, und MB_STRCUT ist derzeit sehr praktisch.

  • Wenn Sie mit dem Unterschied zwischen Bytes und Zeichen nicht vertraut sind, neigen Sie zu Kürzungsausnahmen und verstümmelten Codeproblemen.


 <?php
// Beispielcode:verwendenmb_strcutAbfangenUTF-8编码Charakter串的前6Bytes(对应Zwei chinesische Charaktere)
$str = "Hallo,world!";
$cutStr = mb_strcut($str, 0, 6, "UTF-8");
echo $cutStr; // Ausgabe "Hallo"
?>