首页 > 编程笔记 > PHP笔记 阅读:44

PHP统计字符串的长度(strlen()和mb_strlen())

计算字符串的长度经常在很多应用中出现,比如在输入框输入文字的长度就会用到此功能。在 PHP 中,使用 strlen() 函数就可以实现这个功能。

strlen() 函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为 1。一个中文字符占两个字节,所以一个中文字符的长度是 2。

以下实例介绍计算字符串长度的方法和技巧:
<?php
echo strlen("https://c.biancheng.net/");
echo "<br";
echo strlen("山际见来烟,竹中窥落日。");
?>
运行结果为:

24
36

中文字符串“山际见来烟,竹中窥落日。”中明明是 10 个汉字和 2 个标点符号,为什么查询结果中的字符串的长度是 36?原因是 strlen() 在计算时,对于一个 UTF-8 的中文字符,会把一个汉字的长度当作 3 个字节计算,所以“山际见来烟,竹中窥落日。”中总共有 12 个字符,长度为 36。

当出现中英文混排的情况时,怎么准确地计算字符串的长度呢?这里需要使用另一个函数 mb_strlen()。

mb_strlen() 函数的用法与 strlen() 几乎一模一样,只是多了一个指定字符集编码的参数。

mb_strlen()函数的语法格式如下:
int mb_strlen(string string_input, string encode);
PHP 内置的字符串长度函数 strlen() 无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于 GB2312 的中文编码,strlen() 得到的值是汉字个数的 2 倍,而对于 UTF-8 编码的中文,就是 3 倍的差异了(在 UTF-8 编码下,一个汉字占 3 个字节)。

下面的案例将准确计算出中文字符串的长度。
<?php
echo strlen("山际见来烟,竹中窥落日。");
echo "<br/>";
echo mb_strlen("山际见来烟,竹中窥落日。","UTF8");
?>
运行结果为:

36
12

strlen() 计算时,对待 UTF-8 的中文字符长度是 3,所以“山际见来烟,竹中窥落日。”的长度为 12×3=36。

mb_strlen()计算时,选定内码为 UTF8,将一个中文字符当作长度 1 来计算,所以“山际见来烟,竹中窥落日。”长度为 12×1=12。

相关文章