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学习之PHP表达式
Oct 09 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php实现对象克隆的方法
Jun 20 PHP
php网页版聊天软件实现代码
Aug 12 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
javascript document.images实例
2008/05/27 Javascript
jQuery autocomplete插件修改
2009/04/17 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
JQuery点击行tr实现checkBox选中的简单实例
2016/05/26 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
Python 的 with 语句详解
2014/06/13 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
掌上明珠Java程序员面试总结
2016/02/23 面试题
初中同学聚会感言
2014/02/11 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
学术会议通知
2015/04/15 职场文书
PHP新手指南
2021/04/01 PHP
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android