<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="PHP计算获取中英混合字符串长度方法的示例代码" id="card1">
<p> 游客</p><p>
标题:PHP计算获取中英混合字符串长度方法的示例代码<br/>
正文:<br/>
今晚在写框架的表单验证类时，需要判断某个字符串长度是否在指定区间内，很自然地，想到了PHP中的strlen函数。代码如下:$str = 'Hello world!';<br/>echo strlen($str); // 输出12然而在PHP自带的函数中，strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的，在不同的编码情况下，中文所占的字节数是不同的。在GBK/GB2312下，中文字符占2个字节，而在UTF-8下，中文字符占3个字节。代码如下:$str = '你好，世界！';<br/>echo strlen($str); // GBK或GB2312下输出12，UTF-8下输出18<br/>而我们在判断字符串长度时往往需要判断的是字符的数量，而非字符串所占字节数，如在UTF-8下的这段PHP代码：代码如下:$name = '郑州网建';<br/>$len = strlen($name);<br/>// 输出 FALSE，因为在UTF-8下四个中文占12个字节<br/>if($len &amp;gt;= 3 &amp;amp;&amp;amp; $len &amp;lt;= 8){<br/> echo 'TRUE';<br/>}else{<br/> echo 'FALSE';<br/>}<br/>那么有什么方便而实用的方法可以获得含中文字符串的长度呢？可以用正则计算出中文字符的个数，在GBK/GB2312编码下除以2，UTF-8编码下则除以3，最后再加上非中文字符串的长度，但这样未免太过麻烦。WordPress这么一段代码，借鉴如下：代码如下:$str = 'Hello，世界！';<br/>preg_match_all('/./us', $str, $match);<br/>echo count($match[0]); // 输出9<br/>思想是用正则表达式将字符串分割成单个字符，并直接用count计算出匹配到的字符数，便是我们想要的结果了。但以上代码在UTF-8编码下并不能处理GBK/GB2312的中文字符串，因为GBK/GB2312的中文字符会被识别为两个字符而计算出来的中文字符数量会翻倍，于是我想到了这么一个办法：代码如下:$tmp = @iconv('gbk', 'utf-8', $str);<br/>if(!empty(<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1672&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1672&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1672&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1672&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1672">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1672">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>