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 相关文章推荐
《APMServ 5.1.2》使用图解
Oct 23 PHP
如何使用PHP往windows中添加用户
Dec 06 PHP
php MYSQL 数据备份类
Jun 19 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
PHP获取当前执行php文件名的代码
Mar 02 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 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远程采集图片详细教程
2014/07/01 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
iphone刘海屏页面适配方法
2019/05/07 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
python处理cookie详解
2014/02/07 Python
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
班主任经验交流会主持词
2014/04/01 职场文书
小学生手册家长评语
2014/04/16 职场文书
教代会开幕词
2015/01/28 职场文书
介绍信怎么写
2015/01/30 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
家长会后的感想
2015/08/11 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
2022/01/18 HTML / CSS
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS
redis lua限流算法实现示例
2022/07/15 Redis