Bei der Verarbeitung von Zeichenfolgen in PHP, wenn Multi-Byte-Zeichen wie Chinesen, Japanisch und Koreanisch involviert sind, ist die Verwendung herkömmlicher Streicherfunktionen (wie Substr ) anfällig für Zeichenkürzungsfehler, was zu verstümmelten oder unvollständigen Zeichen führt. Um dieses Problem zu vermeiden, bietet PHP Multi-Byte-String-Erweiterung Mbstring . Zwei sehr praktische Funktionen sind MB_Get_Info und MB_SUBSTR .
In diesem Artikel wird Beispiele verwendet, um zu erklären, wie diese beiden Funktionen kombiniert werden, um Multi-Byte-Zeichenfolgen sicher und korrekt abzufangen.
MB_get_info () wird verwendet, um die aktuellen Multibyte -Umgebungskonfigurationsinformationen zu erhalten. Dadurch können wir wissen, wie die interne Codierung derzeit verwendet wird, um sicherzustellen, dass die Codierung bei der Durchführung von Stringoperationen konsistent ist.
<?php
$info = mb_get_info();
echo "Die derzeit verwendete Multibyte -Kodierung ist:" . $info['internal_encoding'];
?>
Im Allgemeinen wird empfohlen, die Codierung am Anfang des Skripts explizit festzulegen, um Probleme zu vermeiden, die durch Standardeinstellungen verursacht wurden:
<?php
mb_internal_encoding('UTF-8'); // Gesetzt as UTF-8
?>
mb_substr () ist eine Multi-Byte-Version von substr () , mit der Substrings einer bestimmten Länge von einer Zeichenfolge abgefangen werden, mehrere Zeichenkodierungen unterstützt und vermieden werden, dass Zeichen falsch einesgroße Fits-ALLE sind.
Die Syntax ist wie folgt:
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string
Parameter Erläuterung:
$ String : Original String
$ start : Startposition (Start ab 0)
$ Länge : Optional, abgefangene Länge
$ codierung : Optional, geben Sie die Codierung an (es wird empfohlen, sie klar auszuschreiben)
Angenommen, wir haben die ersten 50 Zeichen aus einem von UTF-8 kodierten chinesischen Artikel als Zusammenfassung geschnitten:
<?php
mb_internal_encoding('UTF-8'); // Identifizieren Sie die Codierung
$article = "PHP Es ist eine weit verbreitete Open-Source-Mehrzweck-Skriptsprache,Besonders geeignet für Web Entwickelt und einbettbar HTML Mitte。";
// Vor Abfangen 50 Charaktere
$summary = mb_substr($article, 0, 50);
echo "Artikelzusammenfassung:" . $summary;
?>
Die Ausgabergebnisse werden nicht verstümmelt, da MB_SUBSTR in Zeichen verarbeitet wird, nicht in Bytes.
Wenn ein Benutzer beispielsweise einen Kommentar einreicht, möchten wir nur die ersten 30 Zeichen in der Anzeigeliste anzeigen und den Link "Volltext lesen" angeben:
<?php
mb_internal_encoding('UTF-8');
$comment = "Dies ist ein sehr aufregender Kommentar, der vom Benutzer eingereicht wurde,Wir möchten, dass nur ein Teil des Inhalts angezeigt wird。";
$preview = mb_substr($comment, 0, 30);
echo $preview . '... <a href="https://gitbox.net/full-comment.php?id=123">Lesen Sie den vollständigen Text</a>';
?>
Dies verhindert nicht nur, dass die Seite aufgrund übermäßig langer Inhalte aufgebläht wird, sondern stellt auch die vollständige Anzeige von Zeichen sicher.
Wenn Sie sich mit anderen Codierungen wie GBK, Big5 usw. befassen, denken Sie daran, die Codierungsparameter explizit in jeder MB_ -Funktion anzugeben.
mb_strlen () kann auch in Verbindung verwendet werden, um zu bestimmen, ob dies vor dem Abfangen erforderlich ist (z. B. wenn es nur 20 Zeichen gibt, besteht keine Notwendigkeit, 30 abzufangen).
Wenn Sie abgefangene Inhalte in der HTML -Umgebung ausgeben, sollten Sie auch auf die Flucht achten, um XSS -Probleme zu vermeiden.