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 多关键字 高亮显示实现代码
Apr 23 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
php实现分页工具类分享
Jan 09 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
ThinkPHP安装和设置
Jul 27 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 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 和 MySQL 基础教程(一)
2006/10/09 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
PHP静态文件生成类实例
2014/11/29 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
js的对象与函数详解
2019/01/21 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
python实现的系统实用log类实例
2015/06/30 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
Python小进度条显示代码
2019/03/05 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
顺丰快递Java软件工程师面试题
2015/07/31 面试题
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
答谢词范文
2015/01/05 职场文书
培训班开班主持词
2015/07/02 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python