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 JSON 数据解析代码
May 26 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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中session退出登陆问题
2014/02/27 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
dul无法加载bootstrap实现unload table/user恢复
2016/09/29 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
微信小程序日历组件使用方法详解
2018/12/29 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
Webpack的Loader和Plugin的区别
2020/11/09 Javascript
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python中如何引入第三方模块
2020/05/27 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
德国购买健身器材:AsVIVA
2017/08/09 全球购物
元旦晚会邀请函
2014/01/27 职场文书
个人简历自我评价范文
2014/02/04 职场文书
人事专员的岗位职责
2014/03/01 职场文书
2014年班级工作总结
2014/11/14 职场文书
男方婚礼答谢词
2015/01/20 职场文书
证婚人致辞精选
2015/07/28 职场文书
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript
Redis实现短信验证码登录的示例代码
2022/06/14 Redis