Posts Tagged with utf8

支持utf8的php字符串截取函数


做PHP开发必然会遇到的问题吧, 前两天做那个 最新留言 插件的时候写了一个. 参考 Wikipedia utf-8为变长编码, 编码规则如下:

BinaryHexadecimalDecimalWidth
00000000-0111111100-7F0-1271 byte
11000010-11011111C2-DF194-2232 bytes
11100000-11101111E0-EF224-2393 bytes
11110000-11110100F0-F4240-2444 bytes

多于1个byte的,后续字节都在80–BF之间

实现就很简单了, 利用正则表达式把字符一一分开存储到数组里, 然后要多少取多少就行

function utf8_substr($string, $start, $length) {
preg_match_all ('/[x00-x7F]|[xC2-xDF][x80-xBF]|[xE0-xEF][x80-xBF][x80-xBF]|[xF0-xF4][x80-xBF][x80-xBF][x80-xBF]/', $string, $rs);
$out = '';
$size = count ($rs[0]);
$end = $start + $length;

if ($end > $size ) {
$end = $size;
}

for ($i = $start; $i < $end; $i++) {
$out .= $rs[0][$i];
}

return $out;
}