中文字符计算为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 ;
}