Heim > Artikel > Backend-Entwicklung > So lösen Sie das Problem mit verstümmelten PHP-Substrs
php substr ist eine funktionale Funktion, die auf der Grundlage der PHP-Sprache entwickelt wurde und einen Teil einer Zeichenfolge zurückgeben kann. Wenn wir PHP-Substr verwenden, werden manchmal verstümmelte Zeichen angezeigt. Wie kann ich das Problem lösen?
string substr ( string $string , int $start [, int $length ] )
Gibt eine Zeichenfolge mit einer Länge ab der Startposition in der Zeichenfolge zurück
Die Substr-Funktion fängt Zeichen by Bytes ab, wenn sie in GB2312 codiert sind. Die UTF-8-Codierung beträgt 3 Bytes. Wenn also chinesische Zeichen beim Abfangen einer Zeichenfolge mit der angegebenen Länge abgeschnitten werden, wird das zurückgegebene Ergebnis bei der Anzeige verstümmelt.
Nach der Überprüfung können die Lösungen in zwei Kategorien zusammengefasst werden:
1 Verwenden Sie stattdessen die Funktion mb_substr()
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
Ähnlich wie substr( )-Funktion, die nur nach der Anzahl der Zeichen zählt, um die Zeichensicherheit zu gewährleisten
Durch die Verwendung der Funktion mb_substr() kann sichergestellt werden, dass keine verstümmelten Zeichen vorhanden sind. Der Nachteil besteht jedoch darin, dass die Längenstatistik stattdessen zur Anzahl der Zeichen wird der Anzahl der Bytes. Bei Verwendung zur Anzeige gibt es einen großen Unterschied in der Anzeigelänge zwischen chinesischen Ergebnissen und englischen Ergebnissen gleicher Länge.
2. Selbstgebaute Funktion zur Verbesserung der Substr-Funktion
Hier ist eine Funktion, die das Problem der Substr-Begegnung mit chinesischen Schriftzeichen besser lösen kann. Chinesische Zeichen werden in 2 Längeneinheiten berechnet, sodass die endgültige Anzeigelänge des String-Interception-Ergebnisses in einer gemischten chinesischen und englischen Umgebung nahe beieinander liegt, um sicherzustellen, dass keine verstümmelten Zeichen auf dem Display angezeigt werden Es ist kompatibel mit UTF, das üblicherweise für chinesische Zeichen verwendet wird. Die Kodierung 8 und die Kodierung GB2312 bieten eine gute Vielseitigkeit.
Quellcode anzeigen
function getstr($string, $length, $encoding = 'utf-8') { $string = trim($string); if($length && strlen($string) > $length) { //截断字符 $wordscut = ''; if(strtolower($encoding) == 'utf-8') { //utf8编码 $n = 0; $tn = 0; $noc = 0; while ($n < strlen($string)) { $t = ord($string[$n]); if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { $tn = 1; $n++; $noc++; } elseif(194 <= $t && $t <= 223) { $tn = 2; $n += 2; } elseif(224 <= $t && $t < 239) { $tn = 3; $n += 3; $noc += 2; } elseif(240 <= $t && $t <= 247) { $tn = 4; $n += 4; $noc += 2; } elseif(248 <= $t && $t <= 251) { $tn = 5; $n += 5; $noc += 2; } elseif($t == 252 || $t == 253) { $tn = 6; $n += 6; $noc += 2; } else { $n++; } if ($noc >= $length) { break; } } if ($noc > $length) { $n -= $tn; } $wordscut = substr($string, 0, $n); } else { for($i = 0; $i < $length - 1; $i++) { if(ord($string[$i]) > 127) { $wordscut .= $string[$i].$string[$i + 1]; $i++; } else { $wordscut .= $string[$i]; } } } $string = $wordscut; } return trim($string); } // 示例 echo getstr("0一二三四五六七",1).'<br />'; // 0 echo getstr("0一二三四五六七",2).'<br />'; // 0 echo getstr("0一二三四五六七",3).'<br />'; // 0一 echo getstr("0一二三四五六七",4).'<br />'; // 0一 echo getstr("0一二三四五六七",5).'<br />'; // 0一二 echo getstr("0一a二b三四五六七",1).'<br />'; // 0 echo getstr("0一a二b三四五六七",2).'<br />'; // 0 echo getstr("0一a二b三四五六七",3).'<br />'; // 0一 echo getstr("0一a二b三四五六七",4).'<br />'; // 0一a echo getstr("0一a二b三四五六七",5).'<br />'; // 0一a
Diese Funktion wurde gegenüber der getstr()-Funktion in UCHome 1.5 geändert.
Das Obige ist die Lösung, wie Sie das Problem der verstümmelten PHP-Substr-Zeichen lösen können. Wir haben auch bereits eine Reihe von Artikeln über die PHP-Substr-Funktion geteilt. Wenn Sie sie benötigen, können Sie auf PHP achten Chinesische Website.
Verwandte Empfehlungen:
Einige Programme zur PHP-Substr()-Funktion
Detaillierte chinesische Erklärung der PHP-Substr()-Funktionsverarbeitung
Erklärung zur Verwendung der PHP-Substr()-Funktion zum Abfangen von Zeichenfolgen
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem mit verstümmelten PHP-Substrs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!