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 相关文章推荐
在apache下限制每个虚拟主机的并发数!!!!
Oct 09 PHP
PHP使用者状态管理功能的应用
Oct 09 PHP
BBS(php &amp; mysql)完整版(五)
Oct 09 PHP
基于文本的留言簿
Oct 09 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
Yii框架视图、视图布局、视图数据块操作示例
Oct 14 PHP
php实例化对象的实例方法
Nov 17 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
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
python脚本设置超时机制系统时间的方法
2016/02/21 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
python读写csv文件实例代码
2019/07/05 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
Python基于当前时间批量创建文件
2020/05/07 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
毕业自我鉴定范文
2013/11/06 职场文书
商务主管岗位职责
2013/12/08 职场文书
运动会100米解说词
2014/01/23 职场文书
社区活动策划方案
2014/08/21 职场文书
颐和园导游词
2015/01/30 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
MySQL日期时间函数知识汇总
2022/03/17 MySQL
PyTorch device与cuda.device用法
2022/04/03 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python