实现php截取部分文章

2025-04-08 09:39:10
推荐回答(2个)
回答1:

实际上PHP核心是把所有的文本都安ASIIC来看待的,GBK编码下一个中文字符是2个字节,所以substr时候有可能截取办个中文字符例如stbstr("a中", 0, 2)就把“中”截断了。
mb_string有的服务器没有编译进去。
下边有一个截取中文字符的函数,要求是GBK编码的。
$str是字符串,$strlen是要截取的长度,一个中文算两个字符。
用这个函数就不会出现乱码了
/* 截取一定长度的完整的中文字符 */
function cnsubstr($str,$strlen=10) {
if(empty($str)||!is_numeric($strlen)){
return false;
}
if(strlen($str)<=$strlen){
return $str;
}
//得到第$length个字符 并判断是否为非中文 若为非中文
//直接返回$length长的字符串
$last_word_needed=substr($str,$strlen-1,1);
if(!ord($last_word_needed)>128){
$needed_sub_sentence=substr($str,0,$strlen);
return $needed_sub_sentence;
}else{
for($i=0;$i<$strlen;$i++){
if(ord($str[$i])>128){
$i++;
}
}//end of for
$needed_sub_sentence=substr($str,0,$i);
return $needed_sub_sentence;
}
}

回答2:

中文截取用 mb_substr
$str = "中文截取abcd";
print mb_substr($str,2,3,"gb2312"); // 截取a gb2312 是字符。gb2312不行的话就用 utf8
?>