php脚本中有多个获取字符串长度的函数,比如 strlen(),mb_strlen(),iconv_strlen() 函数等,下面就具体的说一说这几个php获取字符串长度函数的使用方法以及两个自定义获取字符串长度的函数。

中文字占用字节的长度

如果想获取一串带有中文字符串的长度就要先了解一下一个中文字在不同的编码下占用的字节长度!

做中文网站一般都会选择gbk/gb2312编码与utf-8编码,虽然者可以很好的支持中文,但他们的编码方式不同导致了中文在两种编码下所占的字节也不相同!

gbk编码下:每个中文占 2 个字节。
UTF-8编码下:每个中文占 3 个字节。

php strlen() 函数获取字符串的长度

php strlen() 函数返回的是字符串所占字节的长度,而不是字符串中字符的数量,简单来说就是以字节为单位返回字符串的长度!

例:strlen 在utf-8编码下获取字符串的长度

echo strlen('abcd');
// 4
echo strlen('飞鸟慕鱼博客');
// 18
echo strlen('123飞鸟慕鱼博客');
// 21

例2:strlen 在gbk编码下获取字符串的长度

echo strlen('abcd');
// 4
echo strlen('飞鸟慕鱼博客');
// 12
echo strlen('123飞鸟慕鱼博客');
// 15

php mb_strlen() 函数获取字符串的长度

php mb_strlen函数在第二个参数指定uft-8编码的情况下,可以返回字符串中字符的数量而不是返回字符串占用的字节数,如果第二个参数不设置则默认为 null,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数获取或设置。

例1:在函数 mb_strlen() 中指定编码

$str = '飞鸟幕鱼博客';   
echo mb_strlen($str,'utf8');
//6   
echo mb_strlen($str,'gbk');
//9   
echo mb_strlen($str,'gb2312');
//12

例2:通过 mb_internal_encoding() 函数设置php内部编码!

$str = '飞鸟幕鱼博客';   
echo mb_strlen($str,'gb2312');  // 12
//在mb_internal_encoding函数中指定编码
mb_internal_encoding('UTF-8');
echo mb_strlen($str); // 6

以上示例都在UTF-8编码的页面中进行测试,各位可以比较一下输出结果!

注:mb_strlen() 需要 mbstring 支持,没开启这个扩展肯定是不能用的!

例3:使用 mb_strlen 函数是否可用

//判断1
if (function_exists('mb_strlen')) {
    // mb_strlen 函数可用
}
//判断2
if (function_exists('mb_strlen') && function_exists('mb_internal_encoding')) {
    // mb_strlen 函数可用
}

php iconv_strlen() 判断字符串的长度

iconv_strlen() 函数与 mb_strlen() 函数功能相似,但不同的是 iconv_strlen 不依赖 mbstring 扩展而且他处理的字符串编码必须与第二个参数指定的编码相同,否则返回 false

例:

echo iconv_strlen('abcd','utf-8');
// 4
echo iconv_strlen('飞鸟幕鱼博客','utf-8');
// 6
echo iconv_strlen('abcd飞鸟幕鱼博客','utf-8');
// 10

例:

var_dump(iconv_strlen('abcd','utf-8'));
// int(4)
var_dump(iconv_strlen('飞鸟幕鱼博客','gbk2312'));
// bool(false)

php 自定义获取字符串长度的函数

除了上面说的三个php中预设的函数字符串长度的函数外,我们还可以使用正规或组合利用上面的三个函数来获取字符串的长度。

例1:php 使用正规表达式获取字符串的长度

function utf8_strlen($string = null) 
{
    // 将字符串分解为单元
    preg_match_all("/./us", $string, $match);
    // 返回单元个数
    return count($match[0]);
}
echo utf8_strlen('abcd');  //4 
echo utf8_strlen('abcd飞鸟幕鱼博客a'); // 11

例2:利用 mb_strlen,iconv_strlen 三个函数获取字符串的长度

php在 mb_strlen 与 iconv_strlen 函数都可以使用时,推荐优选使用 mb_strlen 函数!

function get_StrLen($string)
{
    if (function_exists('mb_strlen') && function_exists('mb_internal_encoding')) {
        mb_internal_encoding('UTF-8');
        return mb_strlen($string);
    }
    if (function_exists('iconv_strlen') && function_exists('iconv_set_encoding')) {
        call_user_func('iconv_set_encoding', 'internal_encoding', "UTF-8");
        call_user_func('iconv_set_encoding', 'output_encoding', "UTF-8");
        return iconv_strlen($string);
    }
    return strlen($string);
}
echo get_StrLen('abcd');  //4 
echo get_StrLen('abcd飞鸟幕鱼博客a'); // 11