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也可以?成Shell Script
Oct 09 PHP
ADODB的数据库封包程序库
Dec 31 PHP
php URL跳转代码 减少外链
Jun 25 PHP
百度站点地图(百度sitemap)生成方法分享
Jan 09 PHP
PHP is_subclass_of函数的一个BUG和解决方法
Jun 01 PHP
用 Composer构建自己的 PHP 框架之构建路由
Oct 30 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
Yii2 assets清除缓存的方法
May 16 PHP
php结合md5的加密解密算法实例
Sep 30 PHP
PHP实现的分页类定义与用法示例
Jul 05 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/06/20 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
prototype class详解
2006/09/07 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
JS模态窗口返回值兼容问题的完美解决方法
2016/05/28 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
常用原生js自定义函数总结
2016/11/20 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
js实现简易聊天对话框
2017/08/17 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
c++工程师面试问题
2013/08/04 面试题
护士自荐信范文
2013/12/15 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
工厂实习感言
2014/01/14 职场文书
社区十八大感言
2014/01/19 职场文书
运动会广播稿20字
2014/02/18 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
请假条标准格式规范
2014/04/10 职场文书
房屋产权证明书
2014/10/15 职场文书
2015年药店工作总结
2015/04/20 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
Python List remove()实例用法详解
2021/08/02 Python