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('', $a); if (substr($str, $i, 1) !== false) { array_pop($a); ($c == 1) and array_pop($a); $re = implode('', $a); $dot and $re .= '...'; } return $re; } }