php获取utf8字符串的字符长度实例,判定粤语汉字
分类:数据库

PHP对中文字符串的管理直接搅扰Yu Gang刚接触PHP开荒的生手程序猿。上面简要的深入分析一下PHP对汉语字符串长度的管理:

们平时会用到精通字符串长度的时候,在PHP里,能够动用strlen()函数来贯彻。使用格局如下:

 代码如下

明儿上午在写框架的表单验证类时,须求推断有些字符串长度是还是不是在钦点区间内,很自然地,想到了PHP中的strlen函数。

PHP自带的函数如strlen()、mb_strlen()都是通过总结字符串所占字节数来计算字符串长度的,叁个葡萄牙语字符占1字节。例:

PHP strlen() 函数定义和用法

//strlen
//int strlen ( string $string )

 代码如下

$enStr = 'Hello,China!';
echo strlen($enStr); // 输出:12

strlen() 函数再次回到字符串的尺寸。

$str = '123456';
echo strlen($str); // 6

$str = 'Hello world!中';
echo strlen($str); // 输出12

而中文则不然,做普通话网址一般会挑选两种编码:gbk/gb2312或是utf-8。utf-8能协作越多的字符,所以非常受非常多站长的爱怜。gbk与utf-8对中文的编码分歧,导致粤语在gbk与utf-8编码下所占字节也不尽一致。

语法

$str = ' ab cd www.111cn.net';
echo strlen($str); // 20

测量试验一下中文

gbk编码下种种粤语字符所占字节为2,例:

strlen(string)

$ch ='中国';

 代码如下

$zhStr = '您好,中国!';
echo strlen($zhStr); // 输出:12

参数:string
呈报:必需。规定要检查的字符串。

echo strlen($ch);//4

$str = '你好,世界!';
echo strlen($str); // GBK或GB2312下输出12,UTF-8下输出18 www.111cn.net

utf-8编码下各类粤语字符所占字节为3,例:

实例

echo utf8_strlen($str); //20
//

PHP内置的字符串长度函数strlen不能正确管理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的汉语编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的华语,正是3倍的分歧了(在 UTF-8编码下,二个汉字占3个字节)。

$zhStr = '您好,中国!';
echo strlen($zhStr); // 输出:18

 代码如下

澳门新萄京, 代码如下

 

那么哪些总计那组汉语字符串的长短呢?有人大概会说gbk下得到汉语字符串长度除以2,utf-8编码下除以3不就行了吗?不过你要思量字符串并不老实,99%的状态会以中国和英国混合的状态出现。

<?php
echo strlen("Hello world!");
?>

function utf8_strlen($str)
    {
    $count = 0;

上边那几个实例摘自有名的WordPress,特别标准的哦,别的索要留心的是本函数仅适用于utf-8 编码下的字符串。

那是WordPress中的一段代码,首要考虑就是先用正则将字符串分解为私家单元,然后再计算单元的个数即字符串的尺寸,代码如下(只好管理utf-8编码下的字符串):

输出:12

    for($i = 0; $i < strlen($str); $i )
        {
        $value = ord($str[$i]);
        if($value > 127)
            {
            if($value >= 192 && $value <= 223)
                $i ;
            elseif($value >= 224 && $value <= 239)
                $i = $i 2;
            elseif($value >= 240 && $value <= 247)
                $i = $i 3;
            else
                die('Not a UTF-8 compatible string');
            }
      
        $count ;
        }
  
    return $count;
}

 代码如下

复制代码 代码如下:

那正是说对于华语怎么管理

// 上面来探视mb_strlen实例
echo '<br />';
$str ='中国';
echo mb_strlen($str,'gbk'); //2 长度为2,而刚刚我们用strlen时输出的时4,从此间可观看mb_strlen设置了他的编码为gbk时就在那之中文管理了。
echo mb_strlen( $str,'utf8');//3

function utf8_strlen($string=null){
    // 将字符串分解为单元
    preg_match_all("/./us", $string, $match);
    // 重回单元个数  
    return count($match[0]);
}

$zhStr = '您好,中国!';
$str = 'Hello,中国!';

PHP自带的函数如strlen()、mb_strlen()都是因而估测计算字符串所占字节数来总结字符串长度的,一个波兰语字符占1字节。例:

// 当我们设置mb_strlen参数是uft8编码时他的长短为3

但上述代码在UTF-8编码下并不能够处理GBK/GB2312的国语字符串,因为GBK/GB2312的国语字符会被辨以为多个字符而总计出来的中文字符数量会翻倍,于是本人想开了那样二个主意:

// 计算粤语字符串长度
function utf8_strlen($string = null) {
// 将字符串分解为单元
preg_match_all("/./us", $string, $match);
// 重返单元个数
return count($match[0]);
}
echo utf8_strlen($zhStr); // 输出:6
echo utf8_strlen($str); // 输出:9

$

//来看个计算中葡萄牙共和国语混排字符串长度实例

 代码如下

utf8_strlen – 得到UTF8编码的字符串的尺寸

 代码如下

 

    $tmp = @iconv('gbk', 'utf-8', $str);
    if(!empty($tmp)){
    $str = $tmp;
    }
    preg_match_all('/./us', $str, $match);
    echo count($match[0]);

复制代码 代码如下:

enStr = ‘Hello,China!’;
echo strlen($enStr); // 输出:12

$str='中文a字1符中国WEB第一站www.111cn.net原创小说';
//计算如下
echo (strlen($str) mb_strlen($str,'UTF8')) / 2;
echo
//输出结果
//10
/*
strlen //总括字符串长度,多少个汉语当2字符
mb_strlen //依据它的字符编码方式,总括字符quot;
在使用 mb_strlen必须把php教程.ini中php_mbstring.dll后面包车型地铁";"去了才行,不过貌似的套装包暗许是去了的。
本站原创作品,转发表明来源www.111cn.net

可合作GBK/GB2312及UTF-8编码,经小量数据测量检验通过,但暂未规定是否完全正确

/*
* 用于UTF8编码的先后
* 获得字符串的尺寸,二个华语表示3个长度
* itlearner注释
*/
function utf8_strlen($str) {
$count = 0;
for($i = 0; $i < strlen($str); $i ){
$value = ord($str[$i]);
php获取utf8字符串的字符长度实例,判定粤语汉字字符串长度。if($value > 127) {
$count ;
if($value >= 192 && $value <= 223) $i ;
elseif($value >= 224 && $value <= 239) $i = $i 2;
elseif($value >= 240 && $value <= 247) $i = $i 3;
else die('Not a UTF-8 compatible string');
}
$count ;
}
return $count;
}

而普通话则不然,做汉语网址一般会挑选两种编码:gbk/gb2312或是utf-8。utf-8能协作更多的字符,所以受到许多站长的热衷。gbk与utf-8对中文的编码分化,导致中文在gbk与utf-8编码下所占字节也是有距离。

 

PHP自带的函数如strlen...

gbk编码下各样普通话字符所占字节为2,例:

 代码如下

$zhStr = ‘您好,中国!’;
echo strlen($zhStr); // 输出:12

utf-8编码下各类中文字符所占字节为3,例:

 代码如下

$zhStr = ‘您好,中国!’;
echo strlen($zhStr); // 输出:18

那么哪些总结那组中文字符串的长度呢?有人可能会说gbk下获得汉语字符串长度除以2,utf-8编码下除以3不就行了吗?可是你要考虑字符串并不老实,99%的事态会以中英混合的事态出现。

这是WordPress中的一段代码,首要怀念就是先用正则将字符串分解为个人单元,然后再总结单元的个数即字符串的尺寸,代码如下(只可以管理utf-8编码下的字符串):

 代码如下

$zhStr = ‘您好,中国!’;
$str = ‘Hello,中国!’;

// 计算普通话字符串长度
function utf8_php获取utf8字符串的字符长度实例,判定粤语汉字字符串长度。strlen($string = null) {
// 将字符串分解为单元
preg_match_all(“/./us”, $string, $match);
// 重回单元个数
return count($match[0]);
}

echo utf8_strlen($zhStr); // 输出:6
echo utf8_strlen($str); // 输出:9

上边是填补:正确总括字符个数和计量字节数的差异

 代码如下

/借使当前页面编码为GBK
<?php
$str="中国abc";
echo strlen($str); //重临7,因为 GBK编码每一个普通话三个字节,strlen是再次来到字符串所占的字节长度。
echo "<hr>";
echo iconv_strlen($str,"GBK"); //返回5.iconv_strlen 是计算字符串的字符数量
?>
抑或这么写
<?php
$biaoti="中国";
$zijie=strlen($biaoti);
echo $zijie."<br>"; //<br>  换行
?>
//要是当前页面编码为UTF-8
<?php
$str="中国abc";
echo strlen($str); //再次来到9,因为 UTF-8编码各类普通话多个字节,strlen是回来字符串所占的字节长度。
echo "<hr>";
echo iconv_strlen($str,"UTF-8"); //返回5.iconv_strlen 是总结字符串的字符数量
?>
iconv_strlen 是随意何种编码,均能总括规范字符个数。
//假使当前页面编码为GBK
<?php
$str="中国abc";
echo strlen($str); //重返7,因为 GBK编码每在那之中文多少个字节,strlen是重临字符串所占的字节长度。
echo "<hr>";
echo iconv_strlen($str,"GBK"); //返回5.iconv_strlen 是总括字符串的字符数量
?>
//假使当前页面编码为UTF-8
<?php
$str="中国abc";
echo strlen($str); //再次回到9,因为 UTF-8编码每种中文四个字节,strlen是回去字符串所占的字节长度。
echo "<hr>";
echo iconv_strlen($str,"UTF-8"); //返回5.iconv_strlen 是总结字符串的字符数量
?>

iconv_strlen 是随便何种编码,均能估计标准字符个数。

本文由澳门新萄京发布于数据库,转载请注明出处:php获取utf8字符串的字符长度实例,判定粤语汉字

上一篇:澳门新萄京:mysql3调升到mysql5减轻乱码心得,M 下一篇:没有了
猜你喜欢
热门排行
精彩图文