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实现框架(二)
Oct 09 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
php无限极分类实现的两种解决方法
Apr 28 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
php自动加载机制的深入分析
Jun 08 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
Yii2数据库操作常用方法小结
May 04 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
Apr 23 PHP
解决laravel5.4下的group by报错的问题
Oct 16 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP中数组的分组排序实例
2014/06/01 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
主流PHP框架的优缺点对比分析
2014/12/25 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
offsetParent 算法分析
2010/04/05 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
Python tkinter三种布局实例详解
2020/01/06 Python
Python列表list操作相关知识小结
2020/01/29 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
Python是如何进行类型转换的
2013/06/09 面试题
公司活动策划方案
2014/01/13 职场文书
项目投资意向书
2014/04/01 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
个人自荐书怎么写
2015/03/26 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
二审答辩状范文
2015/05/22 职场文书
律政俏佳人观后感
2015/06/09 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书