支持utf8的php字符串截取函数 04月 7th, 2008

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

Binary Hexadecimal Decimal Width
00000000-01111111 00-7F 0-127 1 byte
11000010-11011111 C2-DF 194-223 2 bytes
11100000-11101111 E0-EF 224-239 3 bytes
11110000-11110100 F0-F4 240-244 4 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;

}

Tags: ,
Posted in 学习札记 |

3 Responses to “支持utf8的php字符串截取函数”

  1. zEUS. On

    学习学习…
    我也坐一回沙发!

  2. nch On

    会出问题的,有些特殊字符

  3. wayne On

    @nch:哪些字符啊?是按照utf8的字符做正则表达式来的,应该没什么问题吧

Leave a Reply

Categories