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 相关文章推荐
输出控制类
Oct 09 PHP
PHP实现MySQL更新记录的代码
Jun 07 PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
PHP解压tar.gz格式文件的方法
Feb 14 PHP
PHP数组函数知识汇总
May 12 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
异步加载script的代码
2011/01/12 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
详解JavaScript之Array.reduce源码解读
2020/11/01 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
vue中watch的用法汇总
2020/12/28 Vue.js
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
python字典多条件排序方法实例
2014/06/30 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
KTV的创业计划书范文
2014/02/02 职场文书
九年级政治教学反思
2014/02/06 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2014年领班工作总结
2014/11/25 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫