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 spl_autoload_register实现自动加载研究
Dec 06 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php传值赋值和传地址赋值用法实例分析
Jun 20 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
抛弃 PHP 代价太高
Apr 26 PHP
Yii数据读取与跳转参数传递用法实例分析
Jul 12 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
php中引用符号(&amp;)的使用详细介绍
Dec 06 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 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中让curl支持sock5的代码实例
2015/01/21 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
PHP自定义多进制的方法
2016/11/03 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
2017/08/03 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
JS前端笔试题分析
2016/12/19 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
初步讲解Python中的元组概念
2015/05/21 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
2017/08/15 HTML / CSS
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
求职信格式范本
2013/11/15 职场文书
毕业自荐信
2013/12/16 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
董事长年会致辞
2015/07/29 职场文书
java解析XML详解
2021/07/09 Java/Android
Java字符串逆序方法详情
2022/03/21 Java/Android