php统计中英文字数 如何用php准确统计中英文字数呢?我还没有找到很好的办法,求教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLen=0; $ascLen=strlen($str); $ind=0; $hasCC=ereg("[xA1-xFE]",$str); #判断是否有汉字 $hasAsc=ereg("[x01-xA0]",$str); #判断是否有ASCII字符 if($hasCC && !$hasAsc) #只有汉字的情况 return strlen($str)/2; if(!$hasCC && $hasAsc) #只有Ascii字符的情况 return strlen($str); for($ind=0;$ind<$ascLen;$ind++) { if(ord(substr($str,$ind,1))>0xa0) { $ccLen++; $ind++; } else { $ccLen++; } } return $ccLen; } function ccStrLeft($str,$len) #从左边截取中英文混合字符串 { $ascLen=strlen($str); if($ascLen<=$len) return $str; $hasCC=ereg("[xA1-xFE]",$str); #同上 $hasAsc=ereg("[x01-xA0]",$str); if(!$hasCC) return substr($str,0,$len); if(!$hasAsc) if($len & 0x01) #如果长度是奇数 return substr($str,0,$len+$len-2); else return substr($str,0,$len+$len); $cind=0;$flag=0; while($cind<$ascLen) { if(ord(substr($str,$cind,1))<0xA1) $flag++; $cind++; } if($flag & 0x01) return substr($str,0,$len); else return substr($str,0,$len-1); } /** * UTF-8编码情况下 * * 计算字符串的长度 * * @param string $str 字符串 * * @return array */function strLength($str){ $length = strlen(preg_replace('/[\x00-\x7F]/', '', $str)); $arr['en'] = strlen($str) - $length; $arr['cn'] = intval($length / 3);//编码GBK,除以2 return $arr;} $s = '如何用php准确统计中英文字数呢';echo iconv_strlen($s, 'gbk'); //out:16$s = iconv('gbk', 'utf-8', $s);echo iconv_strlen($s, 'utf-8'); //out:16mb_srting 函数库也有相应的函数 我用的是utf-8的,所以不准,你这个utf-8的怎么弄? utf-8,怎么就“所以不准”?,你贴出结果不准的测试字符串,看看么 我前面注释清楚了给出的是/3,//编码GBK,除以2,你测试的字符串结果不准,麻烦贴出来我看看, 你的php文件是utf-8,编辑器是utf-8,其它的自然是utf8了。 之前没看仔细,你这返回的是数组哦,直接返回$arr['en']+$arr['cn']不就好了么 zendStudio php 小问题 哪位大哥 帮小弟 诠释下~ mysql的select count如何才能更快点? 乱码问题(本机正常,服务器上MYSQL正常,页面乱码) 请教,如何替换XML里面某个指定标签里面的值 乱码问题 急!! 高手帮忙,PHP连接MYSQL的问题 怎么用PHP做文件下载? 数据库读取的问题! 请问这样的json数据,php该如何写 火狐无法获取图片宽度和高度的问题
{
$ccLen=0;
$ascLen=strlen($str);
$ind=0;
$hasCC=ereg("[xA1-xFE]",$str); #判断是否有汉字
$hasAsc=ereg("[x01-xA0]",$str); #判断是否有ASCII字符
if($hasCC && !$hasAsc) #只有汉字的情况
return strlen($str)/2;
if(!$hasCC && $hasAsc) #只有Ascii字符的情况
return strlen($str);
for($ind=0;$ind<$ascLen;$ind++)
{
if(ord(substr($str,$ind,1))>0xa0)
{
$ccLen++;
$ind++;
}
else
{
$ccLen++;
}
}
return $ccLen;
}
function ccStrLeft($str,$len) #从左边截取中英文混合字符串
{
$ascLen=strlen($str); if($ascLen<=$len) return $str;
$hasCC=ereg("[xA1-xFE]",$str); #同上
$hasAsc=ereg("[x01-xA0]",$str);
if(!$hasCC) return substr($str,0,$len);
if(!$hasAsc)
if($len & 0x01) #如果长度是奇数
return substr($str,0,$len+$len-2);
else
return substr($str,0,$len+$len);
$cind=0;$flag=0;
while($cind<$ascLen)
{
if(ord(substr($str,$cind,1))<0xA1) $flag++;
$cind++;
}
if($flag & 0x01)
return substr($str,0,$len);
else
return substr($str,0,$len-1);
}
/**
* UTF-8编码情况下 *
* 计算字符串的长度 *
* @param string $str 字符串
*
* @return array
*/
function strLength($str)
{
$length = strlen(preg_replace('/[\x00-\x7F]/', '', $str)); $arr['en'] = strlen($str) - $length;
$arr['cn'] = intval($length / 3);//编码GBK,除以2
return $arr;
}
echo iconv_strlen($s, 'gbk'); //out:16$s = iconv('gbk', 'utf-8', $s);
echo iconv_strlen($s, 'utf-8'); //out:16mb_srting 函数库也有相应的函数
我用的是utf-8的,所以不准,你这个utf-8的怎么弄?
之前没看仔细,你这返回的是数组哦,直接返回$arr['en']+$arr['cn']不就好了么