加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php使用iconv中文截断问题的解决方法

发布时间:2020-12-13 02:24:41 所属栏目:PHP教程 来源:网络整理
导读:《php使用iconv中文截断问题的解决方法》要点: 本文介绍了php使用iconv中文截断问题的解决方法,希望对您有用。如果有疑问,可以联系我们。 本篇章节讲解php使用iconv中文截断问题的解决办法.供大家参考研究.具体分析如下: PHP学习 今天做了一个采

《php使用iconv中文截断问题的解决方法》要点:
本文介绍了php使用iconv中文截断问题的解决方法,希望对您有用。如果有疑问,可以联系我们。

本篇章节讲解php使用iconv中文截断问题的解决办法.分享给大家供大家参考.具体分析如下:PHP学习

今天做了一个采集程序,原理很简单,使用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使用iconv中文截断问题的解决方法》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读