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

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

先看例子:

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

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

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

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

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

    1. 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/573583868wuy/p/3946295.html

strlen和mb_strlen的区别相关推荐

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

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

  2. 细说PHP中strlen和mb_strlen的区别

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

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

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

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

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

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

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

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

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

  7. php每天一题:strlen()与mb_strlen()的作用分别是什么

    strlen()与mb_strlen()都是用于获取字符串长度的,那么它们两个有什么不同? strlen()与mb_strlen()的不同之处在于mb_strlen()第二个参数可以用于指定字符编码. ...

  8. PHP的strlen与mb_strlen

    说明 strlen()与mb_strlen()的不同之处在于mb_strlen()第二个参数可以用于指定字符编码. 那么为什么要指定字符编码?因为PHP内置的字符串长度函数strlen无法正确处理中文 ...

  9. char[]:strlen和sizeof的区别

    C code: // char[]:strlen和sizeof的区别 #include <stdio.h> #include <string.h> int main(int a ...

最新文章

  1. MySQL优化篇:explain性能分析
  2. 企业微信 添加白名单_企业微信群为什么只能加200人?企业微信群怎么申请扩容?...
  3. VTK修炼之道21:图像基本操作_彩色图像生成灰度图像
  4. 凯兑换系统服务器角色,王者荣耀新英雄凯怎么兑换
  5. 2020-10-03
  6. Python enumerate():使用计数器简化循环
  7. PDCA循环的四个阶段八个步骤,你知道么?
  8. Hacking Vim: 插件管理器Pathogen(02)
  9. 2014中国高中排行榜发布 华中师大一附中居首
  10. MySQL主从- slave跳过错误
  11. 关于ViewPager.PageTransformer的一些理解
  12. python的tkinter插入图片_Python3 Tkinter基础 Text Photoimage 文本框中插入一张图片
  13. (6/300)一阶线性非齐次常微分方程的通解
  14. 分享 60 个相见恨晚的神器工具
  15. javascript如何获取request中的数据
  16. K-means算法及文本聚类实践
  17. BSC上匿名项目DCS 保护个人金融隐私不被侵犯
  18. 一句话木马 php asp,一句话木马源代码
  19. PPT导出高清图片,提高图片分辨率
  20. linux启动程序镜像构建_启动人员分析功能3个构建块

热门文章

  1. 12套经典java实战教程下载链接
  2. MPlayer1.1.1移植记录
  3. gd-flags |= GD_FLG_RELOC; 问题遗留
  4. 10.14 ssh:安全地远程登录主机
  5. Apache的网页和安全优化
  6. gitee最多上传多大文件_H5移动端图片压缩上传,基于Jquery的前端,实现拍照上传,选择相册
  7. 聊聊“数据安全与数据治理”那些事
  8. CodeDay#7 启动 | 北京欢迎你
  9. 2021第一场 | 阿里云高校计划训练营全面升级!0成本体验云计算入门到进阶
  10. 除了清空购物车,阿里年会的技术也够霸气!