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 404错误页面实现代码
Jun 22 PHP
解析php防止form重复提交的方法
Jul 01 PHP
php中的路径问题与set_include_path使用介绍
Feb 11 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
php中eval函数的危害与正确禁用方法
Jun 30 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
php while循环控制的简单实例
May 30 PHP
php for 循环使用的简单实例
Jun 02 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
Feb 26 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中的比较运算符详解
2013/10/28 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
Jquery倒数计时按钮setTimeout的实例代码
2013/07/04 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
AngularJS 最常用的功能汇总
2016/02/17 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
Angualrjs和bootstrap相结合实现数据表格table
2017/03/30 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
js实现简易计算器功能
2019/10/18 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
2020/01/21 Python
python 连续不等式语法糖实例
2020/04/15 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
垃圾回收的优点和原理
2014/05/16 面试题
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
党员创先争优承诺书
2014/03/26 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis