Aktueller Standort: Startseite> Neueste Artikel> So verwenden Sie MB_Strcut, um Strings mit Emoji -Zeichen zu verarbeiten

So verwenden Sie MB_Strcut, um Strings mit Emoji -Zeichen zu verarbeiten

gitbox 2025-05-26

Mb_Strcut ist eine sehr praktische Funktion in PHP, wenn es sich um Multibyte -Zeichenfolgen handelt. Seine Hauptfunktion besteht darin, Substrings durch Bytes aus einer Multibyte -Zeichenfolge abzufangen. Wenn jedoch eine Zeichenfolge Sonderzeichen wie Emoji enthält, erfordert die Verwendung von MB_STRCUT zusätzliche Sorgfalt.

Wie Mb_Strcut funktioniert

MB_STRCUT (String $ String, int $ start,? int $ länge = null, $ $ coding = null): String
Diese Funktion fällt Strings ab, die auf Byte -Offsets basieren (und nicht auf Zeichen -Offsets).

Im Gegensatz zu MB_SUBSTR ist Mb_Strcut tatsächlich eine "Byte-Safe" -Version, aber wenn sie auf einige Multibyte-Zeichen (wie Emoji) stößt, werden sie direkt abgeschnitten und nicht komplette Zeichen.

Schauen wir uns ein Beispiel an:

<code> $ str = "Hallo? World!"; $ cut = mb_strcut ($ str, 0, 9, 'utf-8'); echo $ cut; </code>

Sie können erwarten, dass die Ausgabe Hallo sein wird? , aber Sie können tatsächlich eine gebrochene Schnur sehen, sogar verstümmelt. Das liegt daran, dass ?? Unter UTF-8 ist die Codierung ein 4-Byte-Zeichen, und Mb_Strcut kann in den mittleren Bytes abgeschnitten werden.

Warum ist Emoji besonders problematisch?

Emoji ist normalerweise 4 Bytes oder sogar länger (z. B. zusammengesetzte Emoji, wie z. B. ??????????). Wenn Sie nur nach Bytes schneiden, ohne die Charaktergrenzen zu berücksichtigen, können Sie erscheinen:

  • Die Ausgabe enthält illegale Zeichen;

  • Der Browser wird als verstümmelte Codes oder Fragenmarkierungen angezeigt.

  • Die Datenbank kann einen Fehler melden (insbesondere im strengen Modus).

  • JSON -Codierung kann scheitern.

Wie kann ich anmutig abfangen, die Emoji enthalten?

Wenn Ihr Ziel darin besteht, eine Textvorschau mit Emoji (z. B. eine Zusammenfassung der Inhalte wie Weibo, Kommentare usw.) anzuzeigen, können Sie die folgenden Methoden berücksichtigen:

Methode 1: Verwenden Sie MB_SUBSTR anstelle von mb_strcut

Wenn es Ihnen nichts ausmacht, in "Charaktere" einzuziehen, können Sie MB_SUBSTR verwenden, was sicherstellt, dass die Charaktergrenzen nicht unterbrochen sind:

<code> $ str = "Hallo? World!"; $ preview = mb_substr ($ str, 0, 7, 'utf-8'); echo $ preview; </code>

Dies gibt die vollständigen Zeichen aus, nicht die zerbrochenen Bytes.

Methode 2: Kombinieren regelmäßiger Keulen illegaler Charaktere

Wenn Sie auf der Verwendung von mb_strcut bestehen (z. B. um die Anzahl der Bytes zu steuern), können Sie nach dem Abschneiden regelmäßig unvollständige Zeichen entfernen:

<code> $ str = "Hallo? World!"; $ cut = mb_strcut ($ str, 0, 9, 'utf-8');

// Verwenden Sie die regelmäßige Reinigung illegaler Charaktere
$ clean = preg_replace ('/[\ xc0- \ xff] [\ x80- \ xbf]*$/', '', $ cut);
echo $ clean;
</code>

Dieser Code versucht, unvollständige Multibyte -Zeichen zu entfernen, die am Ende abgeschnitten werden können.

Methode 3: Verwenden Sie den Intlbreakiterator , um die Grenze zu bestimmen (Empfohlene Methode).

Die INTL -Erweiterung von PHP bietet eine Charaktergrenzerkennung, die zum Umgang mit komplexen Multibyte -Zeichen geeignet ist:

<code> $ str = "Hallo? World!"; $ breakiterator = intlbreakiterator :: CreateCharacterInstance ('en'); $ breakiterator-> setText ($ str);

$ bytes = 0;
$ limit = 9;
$ pos = 0;

foreach ($ breakiterator as $ bloße) {
$ chunk = mb_substr ($ str, $ pos, $ bloße - $ pos, 'utf -8');
$ chunkbytes = strlen ($ chunk);
if ($ bytes + $ chunkbytes> $ limit) {
brechen;
}
$ bytes += $ chunkbytes;
$ pos = $ Grenze;
}

$ preview = mb_substr ($ str, 0, $ pos, 'utf-8');
echo $ preview;
</code>

Dies stellt sicher, dass die Schnur, die Sie abfangen, immer noch voller Zeichen unter Byte -Grenzen und für Internationalisierungsprojekte oder komplexe Textverarbeitung geeignet ist.

Zusammenfassen

Wenn Saiten Emoji oder andere Multibyte -Zeichen enthalten, ist eine besondere Aufmerksamkeit erforderlich, um Zeichenfolgen mit mb_strcut abzufangen:

  • Es wird von Bytes abgefangen, die Emoji zerstören können;

  • Nach der Kürzung müssen illegale Charaktere gereinigt oder mit regelmäßiger Reparaturen kombiniert werden.

  • Die Verwendung von MB_SUBSTR ist sicherer, kontrolliert aber keine Bytes genau.

  • Es wird empfohlen, Intlbreakiterator zu verwenden, um sicherzustellen, dass die Kürzungsposition legal ist.

Stellen Sie sicher, dass Sie die Integrität und Kompatibilität der Emoji -Verarbeitung in der Benutzeroberfläche, in der Datenbankspeicherung, in der Schnittstellenausgabe usw. testen, um die Probleme von verstümmelten Code oder Datenausnahmen zu vermeiden.

Weitere Best Practices zur Charakterverarbeitung finden Sie in der Dokumentation oder unter https://gitbox.net/dev/mbstring .