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之Smarty入门
Jan 04 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
php 获取客户端的真实ip
Nov 30 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
php不允许用户提交空表单(php空值判断)
Nov 12 PHP
PHP判断是否连接上网络的方法
Jul 01 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
Laravel5.1框架路由分组用法实例分析
Jan 04 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
77A一级收信机修理记
2021/03/02 无线电
驱动事件的addEvent.js代码
2007/03/27 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
JS去除右边逗号的简单方法
2013/07/03 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
简单的python后台管理程序
2017/04/13 Python
import的本质解析
2017/10/30 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
c语言常见笔试题总结
2016/09/05 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
公司演讲稿开场白
2014/08/25 职场文书
2015年端午节活动总结
2015/02/11 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
放假通知格式
2015/04/14 职场文书
团拜会主持词
2015/07/04 职场文书