php strlen mb_strlen计算中英文混排字符串长度

比较strlen和mb_strlen
当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。(测试时编码方式是UTF8)


代码如下:

<?php
$str=‘中文a字1符‘;
echo strlen($str);
echo ‘<br />‘;
echo mb_strlen($str,‘UTF8‘);
//输出结果
//14
//6
?>

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6
关于中英文混排串的占位符计算:
利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1),计算的方法是:如果一个混排字符串有a个中文,b个英文,占位是:


代码如下:

<?php
$str=‘中文a字1符‘;
//计算如下
echo (strlen($str) + mb_strlen($str,‘UTF8‘)) / 2;
echo
//输出结果
//10
?>

例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.
附网站的一篇文章:
还是有关中文的问题。PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。

采用mb_strlen函数可以较好地解决这个问题。mb_strlen的用法和strlen类似,只不过它有第二个可选参数用于指定字符编码。例如得到UTF-8的字符串$str长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。

(0)

相关推荐

  • php对文件夹进行相关操作(遍历、计算大小)

    为大家分享的第一个操作内容: 遍历并打印指定目录下所有文件 <?php //功能:遍历并打印指定目录下所有文件 function scan_dir($dir_name,$dir_flag=1) { static $FILE_COUNT=1; //记录文件数目 初值为1 目录名称不记 $FILE_COUNT--; //每调用一次scan_dir()函数自减1 @$dir_handle=opendir($dir_name); //抑制错误信息显示 便于自定义错误显示 if(!$dir_handle)

  • php使用递归计算文件夹大小

    方法很简单,这里就不多废话了,直接奉上代码: 复制代码 代码如下: protected function dir_size($dir){         $dh = opendir($dir);             //打开目录,返回一个目录流         $size = 0;      //初始大小为0         while(false !== ($file = @readdir($dh))){     //循环读取目录下的文件            if($file!='.'

  • php计算整个mysql数据库大小的方法

    本文实例讲述了php计算整个mysql数据库大小的方法.分享给大家供大家参考.具体如下: 这里用MB,KB或者GB的格式返回计算结果. function CalcFullDatabaseSize($database, $db) { $tables = mysql_list_tables($database, $db); if (!$tables) { return -1; } $table_count = mysql_num_rows($tables); $size = 0; for ($i=0

  • php计算整个目录大小的方法

    本文实例讲述了php计算整个目录大小的方法.分享给大家供大家参考.具体实现方法如下: /** * Calculate the full size of a directory * * @author Jonas John * @version 0.2 * @param string $DirectoryPath Directory path */ function CalcDirectorySize($DirectoryPath) { // I reccomend using a normali

  • PHP中字符与字节的区别及字符串与字节转换示例

    字符: 字符是可使用多种不同字符方案或代码页来表示的抽象实体.例如,Unicode UTF-16 编码将字符表示为 16 位整数序列,而 Unicode UTF-8 编码则将相同的字符表示为 8 位字节序列.公共语言运行库使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)表示字符. php在UTF-8编码下,一个汉字占3个字符,gbk编码下只占2个字符. 字节(Byte): 字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位. 应用: 如果数据库中表为UTF8

  • 用PHP来计算某个目录大小的方法

    PHP CURL session COOKIE 可以调用系统命令,还可以这样: 复制代码 代码如下: function dirsize($dir) { @$dh = opendir($dir); $size = 0; while ($file = @readdir($dh)) { if ($file != "." and $file != "..") { $path = $dir."/".$file; if (is_dir($path)) { $

  • php计算一个文件大小的方法

    本文实例讲述了php计算一个文件大小的方法.分享给大家供大家参考.具体如下: <?php function dirSize($directoty){ $dir_size=0; if($dir_handle=@opendir($directoty)) { while($filename=readdir($dir_handle)){ $subFile=$directoty.DIRECTORY_SEPARATOR.$filename; if($filename=='.'||$filename=='..

  • php字符串截取中文截取2,单字节截取模式

    //中文截取2,单字节截取模式 function cn_substr($str,$slen,$startdd=0){     $restr = "";     $c = "";     $str_len = strlen($str);     if($str_len < $startdd+1) return "";     if($str_len < $startdd + $slen || $slen==0) $slen = $str

  • PHP实现字节数Byte转换为KB、MB、GB、TB的方法 原创

    本文实例讲述了PHP实现字节数Byte转换为KB.MB.GB.TB的方法.分享给大家供大家参考,具体如下: 前面介绍了java实现字节数Byte转换为KB.MB.GB.TB的方法 ,这里改用PHP实现这一功能.代码非常简单: <?php function getFilesize($num){ $p = 0; $format='bytes'; if($num>0 && $num<1024){ $p = 0; return number_format($num).' '.$f

  • php strlen mb_strlen计算中英文混排字符串长度

    比较strlen和mb_strlen 当字符全是英文字符的时候,两者是一样.这里主要比较一下,中英文混排的时候,两个计算结果.(测试时编码方式是UTF8) 复制代码 代码如下: <?php $str='中文a字1符'; echo strlen($str); echo '<br />'; echo mb_strlen($str,'UTF8'); //输出结果 //14 //6 ?> 结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以"中文a字1符&q

  • php轻松实现中英文混排字符串截取

    先给大家介绍用到的函数: 复制代码 代码如下: mb_strwidth($str, $encoding) 返回字符串的宽度$str 要计算的字符串$encoding 要使用的编码,如 utf8.gbk 复制代码 代码如下: mb_strimwidth($str, $start, $width, $tail, $encoding) 按宽度截取字符串$str 要截取的字符串$start 从哪个位置开始截取,默认是0$width 要截取的宽度$tail 追加到截取字符串后边的字符串,常用的是 ...$

  • js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME

    具体技术 1.使用GB编码与UNICODE的转换 2.数组关联排序 注意:GB编码 库地址 http://demo.jb51.net/jslib/qswhGB2312.js 代码(demo写的很简陋) 复制代码 代码如下: <script> //power by 毛绒猫猫 liuyutong@baidu.com var strGB="啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬 扳般颁板版扮拌伴瓣半

  • PHP字符串长度计算 - strlen()函数使用介绍

    strlen()函数和mb_strlen()函数 在PHP中,函数strlen()返回字符串的长度.函数原型如下: 复制代码 代码如下: int strlen(string string_input); 参数string_input为要处理的字符串. strlen()函数返回字符串所占的字节长度,一个英文字母.数字.各种符号均占一个字节,它们的长度均为1.一个中午字符占两个字节,所以一个中午字符的长度是2.例如 复制代码 代码如下: <?php echo strlen("www.sunch

  • 字符串长度函数strlen和mb_strlen的区别示例介绍

    在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样.这里主要比较一下,中英文混排的时候,两个计算结果. 在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别. 下面通过例子,讲解这两者之间的区别. 先看例子: <?php //测试时文件的编码方式要是UTF8 $str='中文a字1符'; echo strlen($str).'<br>';//14 echo

  • 网页中英文混排行高不等问题的解决方法

    基本上快被这个问题搞疯了,症状如下 症状描述:在ie下(6或7,8没有试过)当出现中英文混排,都采用默认字体时,并使用 li 列表做float时,会出现如上图的症状,文字排列上下不对齐的情况.影响了布局的美观性,造成上图情况的原因是中英文的文字基线不同,arial字体的下边缘要比宋体(同为12号)低一个象素,上边缘比宋体矮两个象素,而且英文还有i,y这种上下基线不同的情况.所以当中英文混排对齐时,就会出现明显的高度差异,使排版不均.可见放大图. 采用中英文字均使用宋体的方案 可以解决文字排列不对

  • golang 获取字符串长度的案例

    1.不同字符与获取字符串长度 获取字符串长度,是字符串操作的重要方法.理论来说,获取字符串长度,只要从头到尾查找一遍就可以了.但遗憾的是,不同字符具有不同的编码格式.拉丁字母一个字符只要一个字节就行,而中文则可能需要两道三个字节:UNICODE把所有字符设置为2个字节,UTF-8格式则把所有字符设置为1--3个字节. 因此,字符串长度的获得,不等于按字节数查找,而要根据不同字符编码查找. 2.golang中获取字符串长度的方法 对于中文开发者来说,经常需要对字符串进行长度判断.golang有自己

  • 利用PHP函数计算中英文字符串长度的方法

    本文实例讲述了利用PHP函数计算中英文字符串长度的方法.分享给大家供大家参考.具体实现方法如下: 一般来说大家知道英文字符占一个字节,而中文字符gbk占两个字符,utf8占三个字符,很多人印象中php计算字符串长度就是strlen()函数,其实不然,它计算的是字节的长度而非字符的长度,那么如何获取一个字符串中字符的长度呢?还有有mb_strlen(). 具体代码如下: 复制代码 代码如下: echo $str = 'PHP点点通'; echo strlen($str); //3*1+3*3=12

  • php常用字符串长度函数strlen()与mb_strlen()用法实例分析

    本文实例讲述了php常用字符串长度函数strlen()与mb_strlen()用法.分享给大家供大家参考,具体如下: int strlen ( string $string ) int strlen ( string $string )  获取给定字符串的[字节]长度 成功则返回字符串$string的长度,如果$string为空,则返回 0. <?php $str1 = "abcdef"; //输出6 $str2 = " ab cd "; //输出7,注意,开

  • mysql 字符串长度计算实现代码(gb2312+utf8)

    PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员.下面简要的剖析一下PHP对中文字符串长度的处理: PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节.例: $enStr = 'Hello,China!'; echo strlen($enStr); // 输出:12 而中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8.utf-8能兼容更多的字符,所以受到很多站长的喜爱.gbk与

随机推荐