Wenn in PHP die Funktion substr() eine chinesische Zeichenfolge abfängt, werden möglicherweise verstümmelte Zeichen angezeigt. Dies liegt daran, dass die Anzahl der von einem Byte belegten Bytes in chinesischen und westlichen Zeichen unterschiedlich ist.
Der Längenparameter von substr wird in Bytes berechnet. Bei der Codierung in GB2312 belegt ein chinesisches Zeichen 2 Bytes und bei der UTF-8-Codierung belegt es 1 Byte. Ein chinesisches Zeichen kann 2 oder 3 Bytes belegen, und englische oder halbbreite Satzzeichen können 1 Byte belegen. (Empfohlenes Lernen: PHP-Programmierung vom Einstieg bis zur Kompetenz)
Die direkte Verwendung der PHP-Funktion substr zum Abfangen chinesischer Zeichen kann zu verstümmelten Zeichen führen, hauptsächlich weil substr ein chinesisches Zeichen zwangsweise konvertieren kann In zwei Hälften „sägen“. Lösung:
1. Verwenden Sie den mb_substr-Abfang der mbstring-Erweiterungsbibliothek, um verstümmelte Zeichen zu vermeiden.
2. Schreiben Sie die Abfangfunktion selbst, aber die Effizienz ist nicht so hoch wie die Verwendung der mbstring-Erweiterungsbibliothek.
3. Wenn nur die abgefangene Zeichenfolge ausgegeben werden soll, kann dies wie folgt implementiert werden: substr($str, 0, 30).chr(0).
Die Funktion substr() kann Text teilen. Wenn der zu teilende Text jedoch chinesische Zeichen enthält, treten häufig Probleme auf. In diesem Fall können Sie die Funktion mb_substr()/mb_strcut verwenden.
Die Verwendung von mb_substr()/mb_strcut ähnelt substr(), außer dass am Ende von mb_substr()/mb_strcut ein weiterer Parameter hinzugefügt werden muss, um die Codierung der Zeichenfolge festzulegen, jedoch auf den meisten Servern Öffnen Sie nicht php_mbstring.dll, Sie müssen php_mbstring.dll in php.ini öffnen.
Zum Beispiel:
<?php echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
Ausgabe: Auf diese Weise mein Wort
<?php echo mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8'); ?>
Ausgabe: Auf diese Weise 1
Wie aus dem obigen Beispiel ersichtlich ist, teilt mb_substr Zeichen nach Wörtern auf, während mb_strcut Zeichen nach Bytes aufteilt, aber keines von beiden erzeugt ein halbes Zeichen.
Das obige ist der detaillierte Inhalt vonSo fangen Sie Strings mit PHP ohne verstümmelte Zeichen ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!