Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung für PHP-Substr-chinesischen verstümmelten Code

Lösung für PHP-Substr-chinesischen verstümmelten Code

高洛峰
高洛峰Original
2016-11-29 16:16:221521Durchsuche

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;

}

}

?>

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn