Heim >Backend-Entwicklung >PHP-Tutorial >PHP verwendet mb_substr(), um das Problem des Abfangens chinesischer Zeichenfolgen und verstümmelter Zeichen zu lösen

PHP verwendet mb_substr(), um das Problem des Abfangens chinesischer Zeichenfolgen und verstümmelter Zeichen zu lösen

伊谢尔伦
伊谢尔伦Original
2016-11-26 14:43:094025Durchsuche

PHP verfügt über mehrere Funktionen zum Abfangen von Zeichenfolgen, unter denen häufig substr und mb_substr verwendet werden. Wenn ersteres Chinesisch verarbeitet, beträgt GBK 2 Längeneinheiten und UTF 3 Längeneinheiten. Nachdem letzteres die Codierung angegeben hat, ist ein chinesisches Zeichen 1 Längeneinheit.

mb_substr Verwendung

string mb_substr( string$str, int$start[, int$length[, string$encoding]] );

mb_substr Führt eine multibytesichere substr()-Operation basierend auf der Anzahl der Zeichen durch. Berechnet von der Startposition von str. Das erste Zeichen steht an Position 0. Die Position des zweiten Zeichens ist 1 und so weiter:

str Die übergeordnete Zeichenfolge, die abgefangen wird.

Ausgangsposition starten.

Länge Die maximale Länge der zurückgegebenen Zeichenfolge. Wenn sie weggelassen wird, wird sie bis zum Ende von str abgeschnitten.

Der Kodierungsparameter ist die Zeichenkodierung. Wenn es weggelassen wird, wird die interne Zeichenkodierung verwendet.

Dann können wir den folgenden Code verwenden, um dieses Problem zu lösen.

$mess=mb_substr($message,0,19,'gb2312');

gb2312 ist das chinesische Kodierungsformat.

mb_substr verarbeitet gemischte chinesische und englische Zeichenfolgen

substr schneidet manchmal 1/3 Chinesisch oder die Hälfte Chinesisch ab und zeigt verstümmelte Zeichen an. Relativ gesehen ist mb_substr für unsere Verwendung besser geeignet. Aber manchmal scheint mb_substr nicht so nützlich zu sein. Wenn ich beispielsweise die kurzen Informationen eines kleinen Bildes anzeigen möchte, sind 5 chinesische Zeichen genau richtig. Wenn es mehr als 5 Zeichen sind, fangen Sie einfach die ersten 4 ab und fügen Sie „…“ hinzu Chinesisch, aber bei der Verarbeitung von Englisch oder Zahlen ist dieser Abfang zu kurz. Dieses Problem kann mit der folgenden Funktion gelöst werden:

<?php
/**
* 字符串截取
*
* @author gesion
* @param string $str 原始字符串
* @param int    $len 截取长度(中文/全角符号默认为 2 个单位,英文/数字为 1。
*                    例如:长度 12 表示 6 个中文或全角字符或 12 个英文或数字)
* @param bool   $dot 是否加点(若字符串超过 $len 长度,则后面加 "...")
* @return string
*/
class Onens {
   public static function g_substr($str, $len = 12, $dot = true) {
       $i = 0;
       $l = 0;
       $c = 0;
       $a = array();
       while ($l < $len) {
           $t = substr($str, $i, 1);
           if (ord($t) >= 224) {
               $c = 3;
               $t = substr($str, $i, $c);
               $l += 2;
           } elseif (ord($t) >= 192) {
               $c = 2;
               $t = substr($str, $i, $c);
               $l += 2;
           } else {
               $c = 1;
               $l++;
           }
           // $t = substr($str, $i, $c);
           $i += $c;
           if ($l > $len) break;
           $a[] = $t;
       }
       $re = implode(&#39;&#39;, $a);
       if (substr($str, $i, 1) !== false) {
           array_pop($a);
           ($c == 1) and array_pop($a);
           $re = implode(&#39;&#39;, $a);
           $dot and $re .= &#39;...&#39;;
       }
       return $re;
   }
}


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