Die direkte Verwendung der PHP-Funktion substr zum Abfangen chinesischer Zeichen kann zu verstümmelten Zeichen führen. Der Hauptgrund dafür ist, dass substr ein chinesisches Zeichen gewaltsam in zwei Hälften zerschneiden kann. Sehen wir uns also an, wie wir dieses Problem lösen können.
Ich glaube, dass jeder in seinen eigenen Programmen häufig das Abfangen von Zeichenfolgen verwendet, beim Abfangen chinesischer Zeichenfolgen jedoch häufig auf das Problem verstümmelter Zeichen stößt. Dies ist sehr problematisch. Als Nächstes stellen wir zwei Methoden vor, um verstümmelte Zeichen beim Abfangen chinesischer Zeichenfolgen zu verhindern.
Zuallererst ist es bequem, eine von Ihnen selbst geschriebene Funktion zu verwenden.
Verwenden Sie diese Funktion zum Abfangen und es entstehen keine verstümmelten Zeichen.
/** * 支持中文字符串截取 */ function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){ switch($charset){ case 'utf-8':$char_len=3;break; case 'UTF8':$char_len=3;break; default:$char_len=2; } //小于指定长度,直接返回 if(strlen($str)<=($length*$char_len)){ return $str; } if(function_exists("mb_substr")){ $slice= mb_substr($str, $start, $length, $charset); }else if(function_exists('iconv_substr')){ $slice=iconv_substr($str,$start,$length,$charset); }else{ $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice($match[0], $start, $length)); } if($suffix) return $slice; return $slice; }
Die zweite ist eine integrierte Funktion in PHP, die mb_substr-Funktion
Gibt das Codierungsformat der Zeichenfolge an abgefangen werden, nur Es kann effektiv verstümmelte Zeichen verhindern.
Erklärung
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) <?php function substr_unicode($str, $s, $l = null) { return join("", array_slice( preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l)); } $str = "Büyük"; $s = 0; // start from "0" (nth) char $l = 3; // get "3" chars echo substr($str, $s, $l) ."\n"; echo mb_substr($str, $s, $l) ."\n"; echo substr_unicode($str, $s, $l); ?>
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe es kann für jeden hilfreich sein, der lernt, hilft.
Verwandte Empfehlungen:
Prinzip des PHP-Ereignismechanismus
PHP-Betriebssitzung und Datenbankmethode
PHP WeChat-Schnittstelle implementiert QR-Code-Generierungsklasse
Das obige ist der detaillierte Inhalt vonBeschreiben Sie kurz die Methode zum Abfangen chinesischer Zeichen in PHP, um verstümmelte Zeichen zu verhindern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!