函数简介
strlen()函数获取字符串的长度,但此函数获取的是字符串在内存中所占的 字节 长度,并不是字符的长度。
成功返回:字符串在内存中所占的字节长度
如果度字符串为空,返回:0
函数原型
int strlen(String $str)
strlen()实例
- 文件编码为 UTF-8
/*============
文件编码:UTF-8
============*/
<?php
$e_str = "Hello World" ; // 字符数 11
$c_str = "你好 世界" ; //字符数 5
var_dump(strlen($e_str)) ;
var_dump(strlen($c_str)) ;
?>
//运行结果
D:\WampServer\www\MyPhpCode\01.php:4:int 11
D:\WampServer\www\MyPhpCode\01.php:5:int 13
var_dump(strlen($e_str)) :度量英文,得到了正确结果11。
ver_dump(strlen($c_str)) :度量中文,得到了错误结果13。
为什么strlen()在度量中文的时候会错误呢?前面已经讲到,strlen()只是返回字符串在内存中占的字节数。由于我的php编码为 UTF-8 ,而一个字母在 UTF-8 中所占的字节数为 1 ,一个汉语在 UTF-8 中占3个字节。
故:
"Hello World" 的字节数为:10(字符数) x 1(一个字符所占字节) + 1(空格所占字节) = 11
"你好 世界" 的字节数为:4(字符数) x 3(一个字符所占字节) + 1(空格所占字节) = 13
在例子2中,我将把php文件的编码改为GBK ,在不修改原代码的情况下看下结果。
/*============
文件编码:GBK
============*/
<?php
$e_str = "Hello World" ; // 字符数 11
$c_str = "你好 世界" ; //字符数 5
var_dump(strlen($e_str)) ;
var_dump(strlen($c_str)) ;
?>
//运行结果
D:\WampServer\www\MyPhpCode\01.php:4:int 11
D:\WampServer\www\MyPhpCode\01.php:5:int 9
var_dump(strlen($c_str)):的结果由 13 变为了 9
因为 GBK 中,一个英文字母占一个字节,一个汉语占2个字节。
故:
"Hello World" 的字节数为:10(字符数) x 1(一个字符所占字节) + 1(空格所占字节) = 11
"你好 世界" 的字节数为:4(字符数) x 2(一个字符所占字节) + 1(空格所占字节) = 9
总结
- strlen()获取传入字符串的长度(字节长度)
- strlen()返回值为类型为 int