支持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: php, utf8
Posted in 学习札记 | 3 Comments »
Recent Post
Recent Comments
- wayne:@Felix: 嗯...我倒是没什么要求, 就是拿来玩的,
- Felix Huang:@wayne en 始终是一分钱一分货 我对稳定性要求比较高
- wayne:@mattw: sandbox的自带style, 我还没空动
- wayne:@mattw: 反正留着也没用... @dimlau: 下
- Felix Huang:我还是一直用mediatemple的(gs)...... 呵
- dimlau:装的不像,没有我帅
- mattw:没到期你 cancel 个啥,留着做测试、做 tunnel
- westup:看你不断的折腾ING
- dimlau:哈哈,又换WP了
- wayne:@半瓶墨水: 不好意思, 从mt导入数据的时候换行被搞乱了