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&amp;mysql(二)
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
php中session与cookie的比较
2015/01/27 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
详解php反序列化
2020/06/10 PHP
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
Python pycharm 同时加载多个项目的方法
2019/01/17 Python
详解Python3中ceil()函数用法
2019/02/19 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
pytorch中图像的数据格式实例
2020/02/11 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
python中取绝对值简单方法总结
2020/07/24 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
医学检验专业大学生求职信
2013/11/18 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
java泛型通配符详解
2021/07/25 Java/Android
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js