Home > Backend Development > PHP Tutorial > 玩转PHP(一)-php中处理汉字字符串长度:strlen和mb_strlen

玩转PHP(一)-php中处理汉字字符串长度:strlen和mb_strlen

WBOY
Release: 2016-06-23 13:41:58
Original
1105 people have browsed it

注:本文为小编原创,如若转载,请注明出处:http://blog.csdn.net/u012116457/article/details/42536039

今天正式开始学习PHP了,不过小编一不小心就发现了一个使用PHP时需要特别注意的地方。

如这个例子:

<meta charset="utf-8"><?php $name="鸣人"; print "姓名的长度为:".strlen($name);?>
Copy after login

这个代码的输出结果是: 姓名的长度为:6

先探讨一下为什么会出现这个问题:PHP内置的字符串长度函数strlen()无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。


如果非要使用strlen函数计算含有中文的字符串的长度也是可以的,下面这个例子是在网上摘来的:

<?php function chinesesubstr($str,$start,$len) {     $strlen=$start+$len;     for($i=0;$i<$strlen;$i++) {         if(ord(substr($str,$i,1))>0xa0) {             $tmpstr.=substr($str,$i,2);             $i++;         } else             $tmpstr.=substr($str,$i,1);     }     return $tmpstr; }?>
Copy after login

不过,除了这个,我们完全可以用 mb_strlen这个函数来计算:

<meta charset="utf-8"><?php $name="鸣人"; print "姓名的长度为:".mb_strlen($name,"utf-8");?>
Copy after login

这是的输出结果即为:姓名的长度为:2


mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。

要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template