php中字符集转换iconv函数使用总结


Posted in PHP onOctober 11, 2014

iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库。

用法如下:

$string = "欢迎访问三水点靠木!";

iconv("utf8","gbk",$string)//将字符串string  编码由utf8转变成gbk;

扩展如下:

echo $str= '欢迎访问三水点靠木!';

echo '<br />';

echo iconv('GB2312', 'UTF-8', $str); //将字符串的编码从GB2312转到UTF-8

echo '<br />';

echo iconv_substr($str, 1, 1, 'UTF-8'); //按字符个数截取而非字节

print_r(iconv_get_encoding()); //得到当前页面编码信息

echo iconv_strlen($str, 'UTF-8'); //得到设定编码的字符串长度

//也有这样用的

$content = iconv("UTF-8","gbk//TRANSLIT",$content);

备注:

1、iconv不是php的默认函数,也是默认安装的模块。需要安装才能用的。

如果是windows2000+php,你可以修改php.ini文件,将extension=php_iconv.dll前的";"去掉,同时你要copy你的原php安装文件下的iconv.dll到你的winnt/system32下(如果你的dll指向的是这个目录,我本地的没有操作这一步)
在linux环境下,用静态安装的方式,在configure时加多一项 --with-iconv就可以了,phpinfo看得到iconv的项。(Linux7.3+Apache4.06+php4.3.2);

到此php中的iconv 介绍完毕

2、用iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些。原因是这样的:

string iconv ( string in_charset, string out_charset, string str )

注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。 被截断了,当然就会少了;

可以这样修改iconv("UTF-8","GB2312//IGNORE",$string)  会忽略掉不能转化的字符;

附加:

PHP中的mb_convert_encoding与iconv函数介绍

mb_convert_encoding这个函数是用来转换编码的,和iconv函数差不多。

英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

mb_convert_encoding的用法见官方:

http://cn.php.net/manual/zh/function.mb-convert-encoding.php

做一个GBK To UTF-8

<?php

header("content-Type: text/html; charset=Utf-8"); //设置字符的编码是utp-8

echo mb_convert_encoding("我的", "UTF-8", "GBK");

?>

再来个GB2312 To Big5

<?php

header("content-Type: text/html; charset=big5");

echo mb_convert_encoding("朋友", "big5", "GB2312");

?>

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库,道理还是一样的,修改php.ini。
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差太多,那为何还要讲解 这个 mb_convert_encoding()函数呢?答案如下:

发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

PHP 相关文章推荐
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
10条php编程小技巧
Jul 07 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
微信支付扫码支付php版
Jul 22 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 #PHP
PHP中执行cmd命令的方法
Oct 11 #PHP
PHP @ at 记号的作用示例介绍
Oct 10 #PHP
php json_encode()函数返回json数据实例代码
Oct 10 #PHP
PHP中构造函数和析构函数解析
Oct 10 #PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 #PHP
php返回json数据函数实例
Oct 09 #PHP
You might like
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php实现36进制与10进制转换功能示例
2017/01/10 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
老生常谈js数据类型
2017/08/03 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Python深度优先算法生成迷宫
2018/01/22 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
教师实习的自我鉴定
2013/10/26 职场文书
工作会议主持词
2014/03/17 职场文书
大学社团活动总结
2014/04/26 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
关于诚信的活动方案
2014/08/18 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
酒会开场白大全
2015/06/01 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
趣味运动会广播稿
2015/08/19 职场文书