中文字符计算为2个字符 英文字符计算为1个
* 可以统计中文字符串长度的函数
*
*/
function abslength($str)
{
$len=strlen($str);
$i=0;
while($i<$len)
{
if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i]))
{
$i+=2;
}
else
{
$i+=1;
}
}
return $i;
}
这个方法很多。 记录一个简单的。 mb_strlen($str, 'GBK'); 缺点是要安装mb库。 不过这个还是有部分问题待解决。 GB码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0XA1-0XFE,共96种。第二个字节的范围分别为0XA1-0XFE,共96种。利用这两个字节共可定义出 96 * 96=8836种汉字。实际共有6763个汉字。 安全点的方法。 function StrLenW($str) |
转自:http://hi.baidu.com/boneguan/blog/item/edbe83d34d5dd632970a168d.html
.
下面这个才是正确的,通用的,,,
* 参数:需要进行统计的字符串、编码格式目前系统统一使用UTF-8
* 时间:2009-07-15
* 修改记录:
$str = "kds";
echo sstrlen($str,'utf-8');
* */
function sstrlen($str,$charset) {
$n = 0; $p = 0; $c = '';
$len = strlen($str);
if($charset == 'utf-8') {
for($i = 0; $i < $len; $i++) {
$c = ord($str{$i});
if($c > 252) {
$p = 5;
} elseif($c > 248) {
$p = 4;
} elseif($c > 240) {
$p = 3;
} elseif($c > 224) {
$p = 2;
} elseif($c > 192) {
$p = 1;
} else {
$p = 0;
}
$i+=$p;$n++;
}
} else {
for($i = 0; $i < $len; $i++) {
$c = ord($str{$i});
if($c > 127) {
$p = 1;
} else {
$p = 0;
}
$i+=$p;$n++;
}
}
return $n;
}