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
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
PHP 采集程序中常用的函数
Dec 09 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
PHP字符串长度计算 - strlen()函数使用介绍
Oct 15 PHP
php去除头尾空格的2种方法
Mar 16 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
thinkPHP实现多字段模糊匹配查询的方法
Dec 01 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP设计模式之工厂模式详解
Oct 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
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
php生成图片验证码
2015/06/09 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
vue渲染方式render和template的区别
2020/06/05 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
python ChainMap的使用和说明详解
2019/06/11 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
初中生个人学习的自我评价
2013/12/04 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
教师节主题班会方案
2015/08/17 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
python 字典和列表嵌套用法详解
2021/06/29 Python
Python基本知识点总结
2022/04/07 Python
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS