PHP에는 여러 문자열 차단 기능이 포함되어 있으며 그 중 substr 및 mb_substr이 일반적으로 사용됩니다. 전자가 중국어를 처리할 때 GBK는 2길이 단위이고, UTF는 3길이 단위이다. 후자는 인코딩을 지정한 후 한자 1자가 1길이 단위가 된다.
mb_substr 사용법
string mb_substr( string$str, int$start[, int$length[, string$encoding]] );
mb_substr 문자 수에 따라 멀티바이트 안전 substr() 작업을 수행합니다. str의 시작 위치에서 계산됩니다. 첫 번째 문자는 위치 0에 있습니다. 두 번째 문자의 위치는 1입니다.
str 가로채는 상위 문자열입니다.
시작 위치를 시작합니다.
length 반환되는 문자열의 최대 길이입니다. 생략할 경우 str의 끝 부분까지 잘립니다.
인코딩 매개변수는 문자 인코딩입니다. 생략하면 내부 문자 인코딩이 사용됩니다.
그런 다음 다음 코드를 사용하여 이 문제를 완료할 수 있습니다.
$mess=mb_substr($message,0,19,'gb2312');
gb2312는 중국어 인코딩 형식입니다.
mb_substr은 중국어와 영어가 혼합된 문자열을 처리합니다.
substr은 때때로 중국어의 1/3 또는 중국어의 절반을 잘라내고 문자가 왜곡되어 표시되는 경우가 있습니다. 상대적으로 말하면 mb_substr이 우리 사용에 더 적합합니다. 그러나 때로는 mb_substr이 그다지 유용하지 않은 것 같습니다. 예를 들어 작은 그림의 간략한 정보를 표시하고 싶다면 한자는 5자가 딱 맞고, 5자가 넘으면 처음 4자를 가로채서 "..."만 추가하면 됩니다. 중국어이지만 영어나 숫자를 처리할 때 이 차단이 너무 짧습니다. 이 문제는 다음 기능을 사용하여 해결할 수 있습니다:
<?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; } }