Heim  >  Artikel  >  Backend-Entwicklung  >  So lösen Sie das Problem mit verstümmelten PHP-Substrs

So lösen Sie das Problem mit verstümmelten PHP-Substrs

小云云
小云云Original
2017-11-11 11:20:393644Durchsuche

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).&#39;<br />&#39;;  // 0    
 echo getstr("0一二三四五六七",2).&#39;<br />&#39;;  // 0    
echo getstr("0一二三四五六七",3).&#39;<br />&#39;;  // 0一    
 echo getstr("0一二三四五六七",4).&#39;<br />&#39;;  // 0一    
 echo getstr("0一二三四五六七",5).&#39;<br />&#39;;  // 0一二    
 echo getstr("0一a二b三四五六七",1).&#39;<br />&#39;;    // 0    
  echo getstr("0一a二b三四五六七",2).&#39;<br />&#39;;    // 0    
 echo getstr("0一a二b三四五六七",3).&#39;<br />&#39;;    // 0一    
 echo getstr("0一a二b三四五六七",4).&#39;<br />&#39;;    // 0一a    
  echo getstr("0一a二b三四五六七",5).&#39;<br />&#39;;    // 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!

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