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数组及条件,循环语句学习
Nov 11 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
PHP实现RTX发送消息提醒的实例代码
Jan 03 PHP
php使用变量动态创建类的对象用法示例
Feb 06 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 开源框架22个简单简介
2009/08/24 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
php取出数组单个值的方法
2018/03/12 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
JS 字符串连接[性能比较]
2009/05/10 Javascript
JavaScript的变量作用域深入理解
2009/10/25 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
JavaScript中的this机制
2016/01/30 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python设计模式之门面模式简单示例
2018/01/09 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
利用python开发app实战的方法
2019/07/09 Python
Django 再谈一谈json序列化
2020/03/16 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
有关浪费资源的建议书
2015/09/14 职场文书
思想品德课教学反思
2016/02/24 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
Feign调用传输文件异常的解决
2021/06/24 Java/Android
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python