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 相关文章推荐
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
Oct 31 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
使用php清除bom示例
Mar 03 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
php实现递归与无限分类的方法
Feb 16 PHP
php银联网页支付实现方法
Mar 04 PHP
使用GD库生成带阴影文字的图片
Mar 27 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
tp5.1 框架路由操作-URL生成实例分析
May 26 PHP
PHP基于array_unique实现二维数组去重
Jul 14 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 程式大小
2006/12/06 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
Python获取apk文件URL地址实例
2013/11/01 Python
用python删除java文件头上版权信息的方法
2014/07/31 Python
Python入门教程之if语句的用法
2015/05/14 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
python操作mysql代码总结
2018/06/01 Python
python让列表倒序输出的实例
2018/06/25 Python
Django Celery异步任务队列的实现
2019/07/24 Python
Python猴子补丁知识点总结
2020/01/05 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
详解python中的异常捕获
2020/12/15 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
创立科技Java面试题
2015/11/29 面试题
应届生程序员求职信
2013/11/05 职场文书
大学毕业自我评价
2014/02/02 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
2014年政教处工作总结
2014/12/20 职场文书
幼师个人总结范文
2015/02/28 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
党支部评议意见
2015/06/02 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
护士业务学习心得体会
2016/01/25 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫