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 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
Dec 07 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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支持页面回退的两种方法[转]
2007/02/14 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
JavaScript中string对象
2015/06/12 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
python实现批量按比例缩放图片效果
2018/03/30 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
Pytorch之保存读取模型实例
2019/12/30 Python
python tkinter之 复选、文本、下拉的实现
2020/03/04 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
运动会演讲稿200字
2014/08/25 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
大学辅导员述职报告
2015/01/10 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers