// 判断后 6 字节是否符合 utf8
规则
$ord0
= ord(
$res
[0] );
if
( 128 <=
$ord0
&& 191 >=
$ord0
){
//
往后截取 , 并加在 res 的前面.
if
( preg_match( '@[\xC0-\xFD][\x80-\xBF]{0,5}$@' ,
$prev_segm
,
$bytes
) ){
if
( !
empty
(
$bytes
[0] ) ){
$bytes
=
$bytes
[0];
$res
=
$bytes
.
$res
;
}
}
}
return
$res
;
}
测试数据::
代码如下:
<?php
$str
= 'dfjdjf 测 13f 试 65&2 数据fdj(1 就 mfe&……就';
var_dump( utf8_substr(
$str
, 22 , 12 ) );
echo
' <br /> ';
var_dump( utf8_substr(
$str
, 22 , -6 ) );
echo
' <br /> ';
var_dump( utf8_substr(
$str
, 9 , 12 ) );
echo
' <br /> ';
var_dump( utf8_substr(
$str
, 19 , 12 ) );
echo
' <br /> ';
var_dump( utf8_substr(
$str
, 28 , -6 ) );
echo
' <br /> ';
显示结果::(截取无乱码, 欢迎大家测试, 提交 bug)
string(12) "据fdj"
string(26) "据fdj(1 就 mfe&…"
string(13) "13f 试 65&2 数"
string(12) "数据fd"
string(20) "dj(1 就 mfe&…"