Aktueller Standort: Startseite> Neueste Artikel> Was soll ich tun, wenn ich beim Abfangen einer Zeichenfolge mit Mb_Strcut verstümmelt habe? Bringen Sie praktische Wege bei, um verstümmelten Code zu vermeiden

Was soll ich tun, wenn ich beim Abfangen einer Zeichenfolge mit Mb_Strcut verstümmelt habe? Bringen Sie praktische Wege bei, um verstümmelten Code zu vermeiden

gitbox 2025-05-27

1. Warum erscheint Mb_Strcut verstümmelt?

mb_strcut () unterscheidet sich von mb_substr () . Es ist in Einheiten und nicht in Charakteren abgefangen. Bei UTF-8-kodierten Zeichenfolgen nimmt ein chinesischer Charakter normalerweise 3 Bytes. Wenn Sie die Zeichenfolge aus einer Byte -Position in der Mitte abschneiden, kann sie unvollständige Zeichen verursachen und so am Ausgang verstümmelte oder illegale Zeichen anzeigen.

Zum Beispiel:

 $str = 'Hallo,Welt';
$cut = mb_strcut($str, 0, 4, 'UTF-8');
echo $cut;

Das Ergebnis dieser Codeausgabe ist wahrscheinlich verstümmelt, da das Wort "Sie" 3 Bytes in UTF-8 einnimmt. Mb_Strcut fängt die ersten 4 Bytes ab und schneidet nur einen Teil des zweiten Charakters "gut" ab und verursacht verstümmelt.


2. Wie kann man verstümmelten Code vermeiden?

1. Verwenden Sie MB_SUBSTR , um zu ersetzen

Wenn Sie nicht ausdrücklich die Steuerung auf Byte-Ebene benötigen, wird empfohlen , mb_substr () zu verwenden, der eher auf der Charakterlänge als auf Bytelänge arbeitet und besser zum Umgang mit Multibyte-Zeichenfolgen geeignet ist:

 $str = 'Hallo,Welt';
$cut = mb_substr($str, 0, 2, 'UTF-8');
echo $cut; // Ausgabe:Hallo

2. Beurteilen Sie die Charaktergrenzen und nehmen Sie sie ab

Wenn Sie mb_strcut () verwenden müssen (zum Beispiel, um die Speicher -Byte -Länge zu begrenzen), müssen Sie MB_strlen () und Zeichencodierung für eine genauere Steuerung kombinieren. Sie können zuerst mb_substr () verwenden, um Zeichen zu erhalten, und dann Strlen () verwenden, um festzustellen, ob es den Byte -Längenbereich überschreitet.

 function safe_mb_strcut($string, $start, $length, $encoding = 'UTF-8') {
    $substr = '';
    $i = 0;
    $byteCount = 0;

    while ($i < mb_strlen($string, $encoding)) {
        $char = mb_substr($string, $i, 1, $encoding);
        $charLen = strlen($char);
        if ($byteCount + $charLen > $length) {
            break;
        }
        $substr .= $char;
        $byteCount += $charLen;
        $i++;
    }
    return $substr;
}

$str = 'Hallo,Welt';
$cut = safe_mb_strcut($str, 0, 6); // Die Gesamtzahl der Bytes ist6
echo $cut; // Ausgabe:Hallo

3. Richten Sie die richtige interne Codierung ein

Stellen Sie bei der Verwendung der Funktion MB_SERIES unbedingt fest, dass die interne Zeichenkodierung das ist, was Sie erwarten (z. B. UTF-8). Sie können die folgenden Methoden verwenden, um global festzulegen:

 mb_internal_encoding('UTF-8');

Darüber hinaus kann es auch auf folgende Weise überprüft und debuggen:

 echo mb_detect_encoding($str); // Überprüfen Sie die String -Codierung

4. Praktisches Szenario Beispiel: Vermeiden Sie URL -Kürzung und verstümmelter Code

Angenommen, Sie möchten einen Teil des Inhalts, der die URL in der Beschreibung enthält, abfangen. Sie können die obige Methode verwenden, um sicher abzufangen, ohne die URL zu zerstören. Zum Beispiel:

 $str = 'Weitere Informationen finden Sie unter Besichtigung:https://gitbox.net/docs/php-guide.html';
$cut = safe_mb_strcut($str, 0, 40);
echo $cut;

Sie können sicherstellen, dass die Ausgabe die URL -Struktur nicht zerstört oder verstümmelte Code verursacht, was besonders für die Zusammenfassung der sozialen Plattform, die E -Mail -Vorschau und andere Szenarien geeignet ist.