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提取视频网站页面中的FLASH地址的代码
Apr 17 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
php封装的表单验证类完整实例
Oct 19 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
thinkphp5 redis缓存新增方法实例讲解
Mar 24 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
DedeCms模板安装/制作概述
2007/03/11 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
countUp.js实现数字滚动效果
2019/10/18 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
python 获取et和excel的版本号
2009/04/09 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
详解Python if-elif-else知识点
2018/06/11 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
最小二乘法及其python实现详解
2020/02/24 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
幼儿园大班毕业感言
2014/02/06 职场文书
认购协议书范本
2014/04/22 职场文书
十八大演讲稿
2014/05/22 职场文书
2014年国庆标语
2014/06/30 职场文书
大学生助学金感谢信
2015/01/21 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
python读取mnist数据集方法案例详解
2021/09/04 Python