在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样。这里主要比较一下,中英文混排的时候,两个计算结果。

PHP中,strlenmb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别。
下面通过例子,讲解这两者之间的区别。

先看例子:

<?php  //测试时文件的编码方式要是UTF8  $str='中文a字1符';  echo strlen($str).'<br>';//14  echo mb_strlen($str,'utf8').'<br>';//6  echo mb_strlen($str,'gbk').'<br>';//8  echo mb_strlen($str,'gb2312').'<br>';//10
?> 

结果分析:在strlen计算时,对待一个UTF8的中文字符是3个长度,所以“中文a字1符”长度是3*4+2=14,在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“中文a字1符”长度是6 .

利用这两个函数则可以联合计算出一个中英文混排的串的占位是多少(一个中文字符的占位是2,英文字符是1)

echo (strlen($str) + mb_strlen($str,'UTF8')) / 2; 

例如 “中文a字1符” 的strlen($str)值是14,mb_strlen($str)值是6,则可以计算出“中文a字1符”的占位是10.

echo mb_internal_encoding(); 

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”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

转载于:https://www.cnblogs.com/mish/p/3355164.html

细说PHP中strlen和mb_strlen的区别相关推荐

  1. 细说PHP中strlen和mb_strlen的区别(转)

    在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别. 下面通过例子,讲解这两者之间的区别. 先看例子: <?php / ...

  2. php strlen 线程安全,浅析PHP中strlen和mb_strlen的区别

    在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别. 下面通过例子,讲解这两者之间的区别. 先看例子: //测试时文件的编码 ...

  3. strlen和mb_strlen的区别

    在php中常见的计算字符串长度的函数有:strlen和mb_strlen.当字符全是英文字符的时候,两者是一样.这里主要比较一下,中英文混排的时候,两个计算结果. 在PHP中,strlen与mb_st ...

  4. PHP获取字符串长度之strlen和mb_strlen的区别

    在PHP中,strlen与mb_strlen是求字符串长度的函数,但是对于一些初学者来说,如果不看手册,也许不太清楚其中的区别. 下面通过例子,讲解这两者之间的区别. 先看例子: <?php / ...

  5. 细说HTTP中POST与GET的区别与联系

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...

  6. php 获取字符串长度 包含空格,php中常用的字符串长度函数strlen()与mb_strlen()实例解释...

    int strlen ( string $string ) int strlen ( string $string )  获取给定字符串的[字节]长度 成功则返回字符串$string的长度,如果$st ...

  7. php判断字符串长度 strlen()与mb_strlen()函数

    我们知道在php中要判断字符串长度我们只要使用strlen()与mb_strlen()函数既可以了,但是并不是我们想得这么简单,特别是在对中英文混合时上面函数有点力不从心哦,下面我来给各位朋友介绍. ...

  8. 实例分析C语言中strlen和sizeof的区别

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  9. linux中系统调用和库函数的区别

    linux中系统调用和库函数的区别 2013-05-03 22:18:20 分类: LINUX 首先,要说一下两者的概念: 系统调用 :是操作系统为用户态运行的进程和硬件设备(如CPU.磁盘.打印机等 ...

最新文章

  1. python 高并发 select socket_python – 使用select处理多个请求
  2. python判断是不是整数的命令_介绍python判断一个数是不是正小数和整数的方法
  3. l380废墨收集垫已到使用寿命_湖北雨水收集系统定制
  4. ipv4地址是几位二进制数_知识点| ip地址详解,小学生都看的懂
  5. 最好的计划是略有闲余的计划,用于缓冲必然出现的错误与突发事件(转)
  6. 【BZOJ1013】球形空间产生器,第一次的高斯消元
  7. python resample函数_18_python_pandas_DataFrame使用指南(上)(1-4)
  8. python十大装b语法_Python 十大语法
  9. 引用、取址运算符、解引用运算符——傻傻分不清楚
  10. LeetCode 40. 组合总和 II(回溯)
  11. 什么?吴宗宪在淘宝帮你买买买?
  12. 小乌龟git的安装、配置(TortoiseGit安装、配置)
  13. 动力环境监控系统作用
  14. LaTex 常用数学公式符号速记
  15. 基于Python飞机票销售系统 毕业设计-附源码141432
  16. 飞思卡尔imx6q交叉编译工具有关问题
  17. 1413. 逐步求和得到正数的最小值
  18. 数模新版视频课程第11讲.时间序列分析
  19. osgEarth示例分析——osgearth_los
  20. otf和ctf的意义_北京邮电大学出版社

热门文章

  1. 你的网站添加X-UA-Compatible meta标签了吗?
  2. 用JScript.net写.net应用程序
  3. 二分查找--AVL查找树
  4. linux命令wc解读
  5. Java机器学习库ML之十一线性SVM
  6. ext2和ext3文件系统知识
  7. Android绑定多个aidl,android aidl 多`module`版的实现
  8. Spring基于注解的AOP配置
  9. DevExpress- XPO入门(1)
  10. C语言实现测量数据处理,求出实际值的范围