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新手上路(十一)
Oct 09 PHP
php中的登陆login
Jan 18 PHP
php checkbox 取值详细说明
Aug 19 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
Apr 26 PHP
PHP单链表的实现代码
Jul 05 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
php中文语义分析实现方法示例
Sep 28 PHP
swoole锁的机制代码实例讲解
Mar 04 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 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 上传文件大小限制
2009/07/05 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
PHP反射基础知识回顾
2020/09/10 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
python类参数self使用示例
2014/02/17 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
python处理二进制数据的方法
2015/06/03 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
2019/06/18 Python
在python中画正态分布图像的实例
2019/07/08 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
临床专业自荐信
2014/06/22 职场文书
离婚协议书样本
2015/01/26 职场文书
大连星海广场导游词
2015/02/10 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
公司人事管理制度
2015/08/05 职场文书
污染环境建议书
2015/09/14 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server