当前位置:  编程技术>php

详解PHP中strlen和mb_strlen函数的区别

    来源: 互联网  发布时间:2014-08-26

    本文导语:  在PHP里有两个计算字符串个数的函数一个是 strlen,一个是mb_strlen;先来看看手册中的定义strlenstrlen — 获取字符串长度int strlen ( string $string )返回给定的字符串 string 的长度。 mb_strlenint mb_strlen ( string $str [, string $encoding ] )返回给定...

在PHP里有两个计算字符串个数的函数
一个是 strlen,一个是mb_strlen;
先来看看手册中的定义
strlen
strlen — 获取字符串长度
int strlen ( string $string )
返回给定的字符串 string 的长度。

mb_strlen
int mb_strlen ( string $str [, string $encoding ] )
返回给定的字符串 string 的长度。
encoding参数为字符编码。如果省略,则使用内部字符编码。

这么看除了mb_strlen可以传递一个字符编码好像没有其他区别,下面通过例子,讲解这两者之间的区别。
先看例子:

代码如下:



结果分析:在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核心函数,Windows 下使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。Linux 下需要编译这个扩展。
 


    
 
 

您可能感兴趣的文章:

  • linux c malloc函数定义及用法详解
  • 浅谈SQLServer的ISNULL函数与Mysql的IFNULL函数用法详解
  • c++断言assert()函数的头文件及其用法详解
  • 请问:setTimeout(p1,p2) 的函数详解,马上给分的。
  • malloc函数详解及用法举例
  • oracle中lpad函数的用法详解
  • fork函数详解?
  • 深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解
  • 从汇编看c++的默认析构函数的使用详解
  • 基于C++字符串替换函数的使用详解
  • 函数指针的一些概念详解
  • 基于C语言fflush()函数的使用详解
  • C++友元函数与拷贝构造函数详解
  • C++中用substr()函数消除前后空格的解决方法详解
  • oracle合并列的函数wm_concat的使用详解
  • java equals函数用法详解
  • oracle求同比,环比函数(LAG与LEAD)的详解
  • C#组合函数的使用详解
  • 深入VC回调函数的使用详解
  • c++实现strcat字符串连接库函数的方法详解
  • mysql 获取当前日期函数及时间格式化参数详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • html保留字符详解
  • 关于tcp/ip详解卷2中的代码
  • Linux/centos/redhat下各种压缩解压缩方式详解
  • 请问哪儿有java2编程详解的电子书下载??本人急需!!跟贴有分!!!
  • TCP协议报头字段详解及报头图
  • 哪有LINUX命令详解下??
  • Web前端设计:html上标<sup>标签与下标<sub>标签详解
  • 求 sun ldoms 配置 虚拟化服务器 步骤详解
  • TCP协议三次握手过程详解
  • 请问:哪里可以下tcp/ip详解书上程序的源码
  • HTML 5 <acronym> 标签定义用法详解
  • Web前端设计:html上标<sup>标签与下标<sub>标签详解 iis7站长之家
  • html5/css3文本阴影(text-shadow)详解及示例
  • 哪本书介绍mutex、POSIX 线程详解
  • HTML 5中<address> 标签定义用法详解及几个示例
  • 哪位java同门师兄有《java2编程详解》电子文档,注意不是影印版
  • linux下进程占用内存空间详解
  • 如何在Linux下使用脚本实现程序的自动重启!望各位详解!
  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • 大家推荐几本详解Linux或unix 操作系统源代码的书籍!!!!
  • Base64编码原理详解及c++编码解码实现
  • ThinkPHP CURD方法之order方法教程详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3