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

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索strlen
mb_strlen
strlen计算字符串长度、strlen字符串长度、c 字符串长度 strlen、mb strlen、php mb strlen,以便于您获取更多的相关知识。

时间: 2025-01-21 04:29:17

字符串长度函数strlen和mb_strlen的区别示例介绍_php技巧的相关文章

php中\r \r\n \t的区别示例介绍_php技巧

\n 软回车: 在Windows 中表示换行且回到下一行的最开始位置.相当于Mac OS 里的 \r 的效果. 在Linux.unix 中只表示换行,但不会回到下一行的开始位置. \r 软空格: 在Linux.unix 中表示返回到当行的最开始位置. 在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果. \t 跳格(移至下一列). 它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效. \r\n 一般一起用,用来表示键盘上的回车键,也可只

字符串长度函数strlen和mb

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

php字符串长度计算strlen和mb_strlen用法

在php中常见的计算字符串长度的函数有:strlen和mb_strlen   比较strlen和mb_strlen   1.strlen PHP内置的字符串长度函数2.mb_strlen 不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保"extension=php_mbstring.dll"这一行存在并且没有被注释掉 当字符全是英文字符的时候,两者是一样的.关于中文的问题,PHP内置的字符串长度函数strlen无法正确处理中文字符串,它

php中处理汉字字符串长度:strlen和mb_strlen

本文转自IT摆渡网欢迎转载,请标明出处 更多php文章请阅读 php问题解决 如这个例子: <html> <meta charset="utf-8"> <body> <?php $name="鸣人"; print "姓名的长度为:".strlen($name); ?> </body> </html> 这个代码的输出结果是:姓名的长度为:6 先探讨一下为什么会出现这个问题:PH

js类定义函数时用prototype与不用的区别示例介绍_javascript技巧

一直在使用js编写自以为是面向对象的方法,遇到一个问题,就是定义一个方法,如下: 复制代码 代码如下: function ListCommon2(first,second,third) { this.First=function () { alert("first do"+first); } } ListCommon2.do1=function(first) { // this.First(); alert("first do"+first); } ListComm

JS与PHP向函数传递可变参数的区别实例代码_php技巧

# JS 调用函数传递可变参数的方法 复制代码 代码如下: <script> function test() { for(var i = 0;i < arguments.length; i++) { alert(arguments[i]); } } //调用函数 test(1, 2, 3, 'abc'); </script> # PHP 调用函数传递可变参数的方法 复制代码 代码如下: <?php //方法一 //接收一系列参数,并逐一输出 function show_

JavaScript中变量声明有var和没var的区别示例介绍_javascript技巧

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供

javascript中的undefined和not defined区别示例介绍_javascript技巧

经研究发现,两者之间有很大的区别,不知从英语讲,这两者都有啥区别,研究结果如下 测试os:ubuntu 测试浏览器:chrome 测试案例1 console.log(a) 报错 ReferenceError: a is not defined 测试案例2 var a console.log(a) 无报错,但是输出undefined 测试案例2 var b = {}; console.log(b.a) 无报错,但是输出undefined 测试案例3 function c() { } var d =

PHP字符串的递增和递减示例介绍_php技巧

今天看到php手册上有这么一段话: "在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的.例如,在 Perl 中 $a = 'Z'; $a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91).注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z).递增/递减其他字符变量则无效,原字符串没有变化." 也就是说: 复制代码 代码如下