Wenn Sie substr direkt zum Abfangen einer chinesischen Zeichenfolge verwenden, werden auf jeden Fall verstümmelte Zeichen erzeugt, da dadurch ein chinesisches Zeichen in zwei Hälften geteilt wird. Das liegt am internen Codierungsproblem der Maschine Schauen Sie sich die Lösung an
1 , Verwenden Sie den mb_substr-Abfang der mbstring-Erweiterungsbibliothek und es werden keine verstümmelten Zeichen angezeigt.
2. Schreiben Sie die Abfangfunktion selbst, aber die Effizienz ist nicht so hoch wie die Verwendung der mbstring-Erweiterungsbibliothek.
3. Wenn es nur um die Ausgabe der abgefangenen Zeichenfolge geht, kann dies auf folgende Weise implementiert werden: substr($str, 0, 30).chr(0).
Das PHP Beispielcode lautet wie folgt:
* Kann verstümmeltes Abfangen chinesischer Zeichen vermeiden
* Parameter $str ist eine Zeichenfolge, $start ist das Startzeichen, $len ist das Endzeichen
* Gibt die abgefangenen Zeichen zurück
*/
function msubstr($str, $start, $len) {
$tmpstr = "";//Open Quellcode phpfensi.com
$ strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} else
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr; 🎜>}
Methode 2, PHP implementiert eine Methode zum Abfangen chinesischer Zeichenfolgen ohne verstümmelte Zeichen. Der Code lautet wie folgt:
function gbsubstr($string, $start, $length) {
if(strlen($string)>$length ){
$str=null;
$len=$start+$length; ($i=$start;$i<$len;$i++) {
if(ord(substr($string,$i,1))>0xa0){
$ str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i, 1);
}
}
return $str.'...';
}else{
return $ string;
}
}
?>