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 相关文章推荐
11个PHP 分页脚本推荐
Aug 15 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
浅析php学习的路线图
Jul 10 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
PHP简单计算两个时间差的方法示例
Jun 20 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
php框架知识点的整理和补充
Mar 01 PHP
PHP7 标准库修改
Mar 09 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
Python实现的字典值比较功能示例
2018/01/08 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python flask搭建web应用教程
2019/11/19 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
Python configparser模块常用方法解析
2020/05/22 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
公司员工检讨书
2014/02/08 职场文书
安全责任协议书
2014/04/21 职场文书
教师自我剖析材料
2014/09/29 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
沈阳故宫导游词
2015/01/31 职场文书