您的位置:

php计算中英混输字符串长度,php字符串处理函数

本文目录一览:

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

strlen()函数和mb_strlen()函数

在PHP中,函数strlen()返回字符串的长度。函数原型如下:

复制代码

代码如下:

int

strlen(string

string_input);

参数string_input为要处理的字符串。

strlen()函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为1。一个中午字符占两个字节,所以一个中午字符的长度是2。例如

复制代码

代码如下:

?php

echo

strlen("");

echo

strlen("三知开发网");

?

“echo

strlen("");”的运行结果:15

“echo

strlen("三知开发网");”的运行结果:15

这里有一个疑问,一个中文字符不是占2个字节吗?“三知开发网”,明明是五个汉字,运行的结果怎么会是15?

原因出在这里:strlen()计算时,对于一个UTF-8的中文字符,会把它当做长度为3来处理。当出现中英文混排的情况下,怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:

复制代码

代码如下:

int

mb_strlen(string

string_input,

string

encode);

PHP内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于GB2312的中文编码,strlen得到的值是汉字个数的2倍,而对于UTF-8编码的中文,就是3倍的差异了(在UTF-8编码下,一个汉字占3个字节)。

因此,下面的代码能准确计算出中文字符串的长度:

复制代码

代码如下:

?php

$str

=

"三知sunchis开发网";

echo

strlen($str)."br";

//结果:22

echo

mb_strlen($str,"UTF8")."br";

//结果:12

$strlen

=

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

echo

$strlen;

//结果:17

?

原理分析:

strlen()计算时,对待UTF-8的中文字符长度是3,所以“三知sunchis开发网”的长度为5×3+7×1=22

在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算,所以“三知sunchis开发网”长度为5×1+7×1=12

剩下的就是纯数学问题了,在此就不啰嗦了……

注意:对于mb_strlen($str,'UTF-8'),如果省略第二个参数,则会使用PHP的内部编码。内部编码可以通过mb_internal_encoding()函数得到。需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函数的问题。

PHP获取中英混合字符串长度的方法

今晚在写框架的表单验证类时,需要判断某个字符串长度是否在指定区间内,很自然地,想到了PHP中的strlen函数。

.代码如下:

$str

=

'Hello

world!';

echo

strlen($str); //

输出12

然而在PHP自带的函数中,strlen及mb_strlen都是通过计算字符串所占字节数来计算长度的,在不同的编码情况下,中文所占的字节数是不同的。在GBK/GB2312下,中文字符占2个字节,而在UTF-8下,中文字符占3个字节。

.代码如下:

$str

=

'你好,世界!';

echo

strlen($str); //

GBK或GB2312下输出12,UTF-8下输出18

而我们在判断字符串长度时往往需要判断的是字符的数量,而非字符串所占字节数,如在UTF-8下的这段PHP代码:

.代码如下:

$name

=

'张耕畅';

$len

=

strlen($name);

//

输出

FALSE,因为在UTF-8下三个中文占9个字节

if($len

=

3

$len

=

8){

echo

'TRUE';

}else{

echo

'FALSE';

}

那么有什么方便而实用的方法可以获得含中文字符串的长度呢?可以用正则计算出中文字符的个数,在GBK/GB2312编码下除以2,UTF-8编码下则除以3,最后再加上非中文字符串的长度,但这样未免太过麻烦。

WordPress这么一段代码,借鉴如下:

.代码如下:

$str

=

'Hello,世界!';

preg_match_all('/./us',

$str,

$match);

echo

count($match[0]); //

输出9

思想是用正则表达式将字符串分割成单个字符,并直接用count计算出匹配到的字符数,便是我们想要的结果了。

但以上代码在UTF-8编码下并不能处理GBK/GB2312的中文字符串,因为GBK/GB2312的中文字符会被识别为两个字符而计算出来的中文字符数量会翻倍,于是我想到了这么一个办法:

.代码如下:

$tmp

=

@iconv('gbk',

'utf-8',

$str);

if(!empty($tmp)){

$str

=

$tmp;

}

preg_match_all('/./us',

$str,

$match);

echo

count($match[0]);

可兼容GBK/GB2312及UTF-8编码,经小量数据测试通过,但暂未确定是否完全正确,盼有大牛指点一二。

以上本意是为了框架可以兼容多种编码格式,但一般在日常开发中,一个项目是已经可以确定为何种编码的,因此可以使用以下函数来方便地获取字符串长度:

.代码如下:

int

iconv_strlen

(

string

$str

[,

string

$charset

=

ini_get("iconv.internal_encoding")

]

)

PHP 中如何获得中英文混合字符串长度

$str='中文a字1符';

echo strlen($str);

echo 'br /';

echo mb_strlen($str,'UTF8');

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

本文实例讲述了利用PHP函数计算中英文字符串长度的方法。分享给大家供大家参考。具体实现方法如下:

一般来说大家知道英文字符占一个字节,而中文字符gbk占两个字符,utf8占三个字符,很多人印象中php计算字符串长度就是strlen()函数,其实不然,它计算的是字节的长度而非字符的长度,那么如何获取一个字符串中字符的长度呢?还有有mb_strlen().

具体代码如下:

复制代码

代码如下:echo

$str

=

'PHP点点通';

echo

strlen($str);

//3*1+3*3=12

echo

mb_strlen($str,

'gb2312');

//3*1+3*2=9

echo

mb_strlen($str,

'utf-8');

//6