这个不是bug,你可以用mb_string扩展,或者
/*****************************************************
*
* 文件名称: CSubstr.inc
* 作 用: 截取指点长度的中文字符
* 作 者: PHPX.COM--PHP论坛
*
* 参 数: $str : 所要截取的字符
* $start: 开始字符
* $len : 截取长度,汉字
*
*****************************************************/
function csubstr($str,$start,$len){
$strlen = strlen($str);
$clen = 0;
for($i = 0; $i < $strlen; $i++,$clen++) {
if ($clen >= $start+$len) break;
if(ord(substr($str,$i,1)) > 0xa0) {
if ($clen >= $start)
$tmpstr .= substr($str,$i,2);
$i++;
}else{
if ($clen >= $start)
$tmpstr .= substr($str,$i,1);
}
}
return $tmpstr;
}
/*****************************************************
*
* 文件名称: CSubstr.inc
* 作 用: 截取指点长度的中文字符
* 作 者: PHPX.COM--PHP论坛
*
* 参 数: $str : 所要截取的字符
* $start: 开始字符
* $len : 截取长度,汉字
*
*****************************************************/
function csubstr($str,$start,$len){
$strlen = strlen($str);
$clen = 0;
for($i = 0; $i < $strlen; $i++,$clen++) {
if ($clen >= $start+$len) break;
if(ord(substr($str,$i,1)) > 0xa0) {
if ($clen >= $start)
$tmpstr .= substr($str,$i,2);
$i++;
}else{
if ($clen >= $start)
$tmpstr .= substr($str,$i,1);
}
}
return $tmpstr;
}
$str='我爱你中华';
echo substr($str,0,5); //以前就会出现乱码,但是现在不会出现乱码了,你们有没有发现?
?>
php也不知道你是一串法语还是一串中文,它怎么可能不截断中文?
built-in unicode support
不太了解utf-8,好像一个汉字占3字节,如果要截取前两个汉字,应该是substr($str,0,5);才能截到,如果是substr($str,0,4);就只能截到第一个汉字。
我的php是5.14