PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法


Posted in PHP onNovember 11, 2015

PHP用mb_string函数库处理与windows相关中文字符

昨天想批处理以前下载的一堆文件,把文件里的关键内容用正则匹配出来,集中处理。在操作文件时遇到一个问题,就是windows操作系统中的编码问题。

我们都知道windows中(当然是中文版),文件名和文件内容等编码都是gbk,而我们在开发过程中,IDE里的编码则是UTF-8,(这里不讨论为什么等等问题,

只考虑怎么把编码转变成一样的)所以导致我写的UTF-8编码的正则模式字符串中的中文在gbk编码的文件中并不能正确匹配。

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

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

string iconv ( string $in_charset , string $out_charset , string $str )
Performs a character set conversion on the string str from in_charset to out_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的字符时,替换会被中断。
但是,我在用这个函数处理时,结果却是这样:

PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法

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

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

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

PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法

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

string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
Converts the character encoding of string str to to_encoding from optionally from_encoding.

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

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

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

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

最后介绍一下mb_string函数库,它全名叫Multibyte String,它的很多方法都扩展自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

当然,它还有更多有特色的地方~

下面给大家介绍Windows环境下开启PHP Mb_String方法

前几天跑一个Php程序,需要转字符编码,可是一探服务器,居然说不支持Mb_String扩展。我查了Php的扩展库里是有php_mbstring.dll这个文件的。

下面将打开的方法告诉大家

1.确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Windows/system32里面。

2.在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到
;extension=php_mbstring.dll

然后将前面的;号去掉,打开对组件的支持

3.重启PHP服务(如果不会你可重新启一下计算机)

4.完成

PHP 相关文章推荐
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
php上的memcache和memcached两个pecl库
Mar 29 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
smarty简单分页的实现方法
Oct 27 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
PHP中overload与override的区别
Feb 13 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
深入php内核之php in array
Nov 10 #PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 #PHP
php实现可运算的验证码
Nov 10 #PHP
如何使用PHP Embed SAPI实现Opcodes查看器
Nov 10 #PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 #PHP
深入理解PHP内核(一)
Nov 10 #PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 #PHP
You might like
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
jQuery操作cookie
2016/08/08 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
Dillard’s百货官网:Dillards.com
2018/05/26 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
公司活动邀请函
2014/01/24 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
小学毕业演讲稿
2014/04/25 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
力学专业求职信
2014/07/23 职场文书
春游踏青活动方案
2014/08/14 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL