详解PHP用mb_string处理windows中文字符

admin3年前PHP教程94

我们都知道windows中(当然是中文版),文件名和文件内容等编码都是gbk,而我们在开发过程中,IDE里的编码则是UTF-8,(这里不讨论为什么等等问题,只考虑怎么把编码转变成一样的)所以导致我写的UTF-8编码的正则模式字符串中的中文在gbk编码的文件中并不能正确匹配。

一开始,我并没有什么办法,试过把PHP脚本文件的编码也改成GBK,也可以用,但是想到这种方法太low了,所以找一找PHP中有没有函数可以满足我的需求。

这时,我想到了以前在处理windows中的文件名时用的函数iconv(),其函数原型如下:

stringiconv(string$in_charset,string$out_charset,string$str)

Performsacharactersetconversiononthestringstrfromin_charsettoout_charset.

我们常使用:


$out_charset='utf-8';
 
$fileName=iconv($fileName,$out_charset,'gbk');

来处理文件名,将文件名改从gbk改为UTF-8而内容不变。

手册翻译附加:

如果你在输出字符串$out_charset后面添加//TRANSLIT即$out_charset='utf-8//TRANSLIT',在遇到不能转换为UTF-8的字符时,程序会自动替换为一个相似字符的UTF-8字符;如果你在输出字符串$out_charset后面添加//IGNORE即$out_charset='utf-8//IGNORE',在遇到不能转换为UTF-8的字符时,程序会自动跳过这个字符。如果你什么都没加,就在遇到不能替换成UTF-8的字符时,替换会被中断。

但是,我在用这个函数处理时,结果却是这样:

意思是iconv()函数能处理的最大字符数只有64,一般的文件名大小,而我的文件内容很显然不止64个字符。

没有办法,我只好再次各种翻找别的函数。

直到我发现了mb_string函数库,这个函数库一般都在PHP环境里集成,我们可以在phpinfo()里找到它。

mb_string函数里有一个mb_convert_encoding()函数,可以将一个字符串的编码改变,其函数原型如下:

stringmb_convert_encoding(string$str,string$to_encoding[,mixed$from_encoding])

Convertsthecharacterencodingofstringstrtoto_encodingfromoptionallyfrom_encoding.

基原型跟iconv()函数差不多,只是它没有对输出函数的后缀修饰,它也没有对字符串长度的明确限制。

而且我们看到$from_encoding是可选的,它可以自动识别源编码。

因为找不到一个确切的无法转码的字符,也不知道它遇到无法转码的字符会怎么处理。

通过mb_convert_encoding()函数,将整个文件处理了一下,于是,问题顺利解决。

最后介绍一下mb_string函数库,它全名叫MultibyteString,它的很多方法都扩展自PHP自身的string函数库,函数名在原函数的前面加了"mb_",这些函数除了拥有原函数的作用外,还在可选参数的最后加入了一个$encoding的可选参数,这个参数可以规定函数以什么样的编码方式来处理字符串。

例如strpos()函数,找到一个字符串在另一个字符串中的位置。

strpos("欢迎来访问","问",0)返回的结果是12,因为脚本是UTF-8编码,而将字符串转为UTF-8编码后,每个中文字符会占用3个字节。

而在mb_strpos()函数中,mb_strpos("欢迎来访问","问",0,'utf-8')则会返回4,它会将字符串当作已经转UTF-8的状态执行。

而mb_strpos("欢迎来访问","问",0,'gbk')会返回6

以上就是详解PHP用mb_string处理windows中文字符的详细内容,更多关于PHP用mb_string处理windows中文字符的资料请关注其它相关文章!

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

江苏高防服务器如何安全有效防御DDOS攻击

江苏高防服务器如何安全有效防御DDOS攻击?DDoS(分布式拒绝服务攻击)是一种非常常见的网络攻击方式,它的目的是通过同时向一个网络资源发送大量的请求,以致于让该资源无法响应正常的请求。以下是几种江苏...

显卡服务器有什么作用租用成都显卡服务器如何选择

显卡服务器是什么?指的是一般的服务器是没有加显卡的,增加了显卡的服务器,可以用来异构计算,用GPU来大大加速那些CPU不是很擅长的浮点运算。一般是用来做3D图形应用程序、视频解码、深度学习、科学计算或...

PHP优化教程之解决嵌套问题

在开发过程中,我们经常遇到一对多的场景,例如:查询订单列表,并且展示订单详情商品、数量数据思路0:传统做法a. 查询订单列表b. 遍历订单详情$orderList = select * from or...

泉州高防服务器租用需要注意什么

泉州高防服务器租用需要注意以下几点:1.选择正规的服务提供商:选择正规的服务提供商是非常重要的,这可以确保您的服务器能够得到良好的维护和保障,同时可以避免不必要的问题和风险。2.确认高防性能:选择高防...

泉州高防服务器防御方式是怎么样的

泉州高防服务器的防御方式主要有以下几种:流量清洗:流量清洗是高防服务器最基本的防御方式,它通过对所有进入服务器的流量进行实时监测和分析,检测出异常流量并将其过滤掉,从而保证服务器正常运行。这种方式可以...

哪些业务网站适合选择日本服务器进行搭建

哪些业务网站适合选择日本服务器进行搭建?日本服务器可以适用于许多不同的业务网站,下面是一些适合选择日本服务器进行搭建的业务网站类型:游戏类网站:日本是一个游戏文化非常发达的国家,因此如果您是一名游戏开...