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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
PHP连接access数据库
Mar 27 PHP
php flush类输出缓冲剖析
Oct 19 PHP
php 数组的指针操作实现代码
Feb 08 PHP
php报表之jpgraph柱状图实例代码
Aug 22 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP邮件群发机实现代码
Feb 16 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 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缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
PHP微信分享开发详解
2017/01/14 PHP
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
JavaScript实现切换多张图片
2021/01/27 Javascript
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
[38:27]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第二场 11.26
2020/11/30 DOTA
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
简单易懂的python环境安装教程
2017/07/13 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
平面设计师工作职责范文
2013/12/03 职场文书
正规的求职信范文分享
2013/12/11 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
公司授权委托书范文
2014/09/21 职场文书
龙门石窟导游词
2015/02/02 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers