PHP中mb_convert_encoding与iconv函数的深入解析


Posted in PHP onJune 21, 2013

mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。

不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。
mb_convert_encoding的用法见官方:
http://php.net/manual/zh/function.mb-convert-encoding.php
做一个GBK To UTF-8

< ?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("???S我的友仔", "UTF-8", "GBK");
?>

再来个GB2312 To Big5
< ?php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
?>

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。
PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。
下面还有一些详细的例子:
iconv — Convert string to requested character encoding
(PHP 4 >= 4.0.5, PHP 5)
mb_convert_encoding — Convert character encoding
(PHP 4 >= 4.0.6, PHP 5)

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;
string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
Returns the converted string or FALSE on failure.
使用:
发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);
/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */
$str = mb_convert_encoding($str, “EUC-JP”, “auto”);

例子:
$content = iconv(”GBK”, “UTF-8″, $content);
$content = mb_convert_encoding($content, “UTF-8″, “GBK”);
PHP 相关文章推荐
php UTF8 文件的签名问题
Oct 30 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
php简单统计在线人数的方法
May 10 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 #PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 #PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 #PHP
基于PHP文件操作的详细诠释
Jun 21 #PHP
解析php安全性问题中的:Null 字符问题
Jun 21 #PHP
浅析SVN常见问题及解决方法
Jun 21 #PHP
关于svn冲突的解决方法
Jun 21 #PHP
You might like
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
Cookie 小记
2010/04/01 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
用python读写excel的方法
2014/11/18 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python Celery定时任务的示例
2018/03/13 Python
python递归法解决棋盘分割问题
2019/07/17 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
2014升学宴答谢词
2014/01/26 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
银行求职自荐信
2014/06/30 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP