php 截取UTF-8中文字符串问题 10

正常的话UTF-8汉字是占据三个字节字母和数字是一个字节我想写个方法比如$str="我日1啊";给这个方法的参数为4的话就截取我日5就我日1我自己写了个方法functio... 正常的话UTF-8汉字是占据三个字节 字母和数字是一个字节
我想写个方法 比如$str="我日1啊";
给这个方法的参数为4的话就截取我日 5就我日1
我自己写了个方法
function utf_substr($text,$length){

$k=0;
for($i=0;$i<$length;$i++){
$z=mb_substr($text,$i,1,'UTF-8');
if(ord($z)>=128){
//echo $z;
$k+=3;
$i++;
echo "+3";
}
else{
$k+=1;
echo "+1";
}
}
$str=substr($text,0,$k);
// echo $k;
return $str;
}
$str="我服了啊abc";
echo utf_substr($str,6);
现在又问题 求帮我改改
展开
 我来答
woshivaliant
2011-03-29 · TA获得超过350个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:223万
展开全部
substr()函数可以 分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函数,mb_substr() /mb_strcut的用法与substr()相似,只是在mb_substr()/mb_strcut最后要加入多一个参数,以设定字符串的编码,但是 一般的服务器都没打开php_mbstring.dll,需要在php.ini在把php_mbstring.dll打开。
mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象……

所以,把$str=substr($text,0,$k);替换为 $str=mb_substr($text,0,$k,'UTF-8');就ok了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
姑苏初晴e5
2011-03-29 · TA获得超过289个赞
知道小有建树答主
回答量:394
采纳率:0%
帮助的人:381万
展开全部
试一试这个函数:
//function :截取中文字符
function zh_substr($string, $start, $length)
{
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
//ord()函数返回字符的 ASCII (美国国家标准交换码) 序数值。本函数和 chr() 函数相反。
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-29
展开全部
无法截取utf-8字符串,因为utf-8字符串,字节数不固定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
65890836
2011-03-29
知道答主
回答量:29
采纳率:0%
帮助的人:3.6万
展开全部
登录后再说一遍,增加积分,无法截取utf-8字符串,因为utf-8字符串,字节数不固定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式