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读MYSQL中文乱码的解决方法
Dec 17 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
php eval函数用法总结
Oct 31 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
Jun 20 PHP
php提交表单发送邮件的方法
Mar 20 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
laravel学习教程之存取器
Jul 30 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
PHP Web表单生成器案例分析
Jun 02 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 curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP开发注意事项总结
2015/02/04 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
学习YUI.Ext基础第一天
2007/03/10 Javascript
可以支持多中格式的JS键盘
2007/05/02 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
Bootstrap表格和栅格分页实例详解
2016/05/20 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
详解Swift中属性的声明与作用
2016/06/30 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python之拟合的实现
2019/07/19 Python
python实现大量图片重命名
2020/03/23 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法
2016/07/08 HTML / CSS
搞笑的获奖感言
2014/08/16 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers