php使用iconv中文截断问题的解决方法


Posted in PHP onFebruary 11, 2015

本文实例讲述了php使用iconv中文截断问题的解决方法。分享给大家供大家参考。具体分析如下:

今天做了一个采集程序,原理很简单,使用curl方法把对方页面的html获取分析,然后正则提取需要的数据并保存在数据库。

由于对方页面是GB2312编码,而本地使用的是UTF-8编码。因此在采集后需要进行编码转换。

使用了iconv方法进行编码转换

iconv — 字符串按要求的字符编码来转换 
string iconv ( string $in_charset , string $out_charset , string $str )

将字符串 str 从 in_charset 转换编码到 out_charset 。  

转换的方法很简单,直接使用iconv方法就可以了

<?php 
$content = iconv('GB2312', 'UTF-8', $content); //$content为采集到的内容 
?>

试验了几个页面,都能正常采集。但在之后的采集中,有几个页面采集不完整。
一开始考虑是否正则有错,检查后排除此问题。经过排查,发现经过iconv转码后的内容比采集的内容少了一大段。
查看apache log,看到提示:Notice: iconv(): Detected an illegal character in input string。

翻查手册,看到以下说明

如果你在 out_charset 后添加了字符串 //TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。

如果你添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则, str 从第一个无效字符开始截断并导致一个 E_NOTICE 。

原来iconv遇到不能识别的内容,会从第一个不能识别的字符开始截断,并生成一个E_NOTICE。因此后边的内容被丢弃了。

而在输出字符集后加上//IGNORE则只丢弃不能识别的内容,而不会截断和丢弃后面的内容。

修改程序后一切正常

<?php 
$content = iconv('GB2312','UTF-8//IGNORE',$content);//$content为采集到的内容
?>

Tips:使用iconv时,如果要使用UTF-8编码的,请使用UTF-8而不要使用UTF8,因为UTF8有些服务器会有问题。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
[转帖]PHP世纪万年历
Dec 06 PHP
php实现mysql数据库备份类
Mar 20 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
php使用google地图应用实例
Dec 31 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
php发送与接收流文件的方法
Feb 11 #PHP
php实现上传图片保存到数据库的方法
Feb 11 #PHP
php使用curl获取https请求的方法
Feb 11 #PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 #PHP
php判断并删除空目录及空子目录的方法
Feb 11 #PHP
php获取YouTube视频信息的方法
Feb 11 #PHP
php实现图片局部打马赛克的方法
Feb 11 #PHP
You might like
php页面消耗内存过大的处理办法
2013/03/18 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
详解vue中axios的使用与封装
2019/03/20 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
Python合并多个装饰器小技巧
2015/04/28 Python
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python flask框架实现重定向功能示例
2019/07/02 Python
详解Python self 参数
2019/08/30 Python
Pytorch提取模型特征向量保存至csv的例子
2020/01/03 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
财务管理个人自荐书范文
2013/11/24 职场文书
学校大课间活动方案
2014/01/30 职场文书
玲玲的画教学反思
2014/02/04 职场文书
致200米运动员广播稿
2014/02/06 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
财务人员入职担保书
2015/09/22 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
vue中 this.$set的使用详解
2021/11/17 Vue.js