找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1329|回复: 0
打印 上一主题 下一主题

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

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:49:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            本文实例讲述了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方法就可以了

试验了几个页面,都能正常采集。但在之后的采集中,有几个页面采集不完整。
一开始考虑是否正则有错,检查后排除此问题。经过排查,发现经过iconv转码后的内容比采集的内容少了一大段。
查看apache log,看到提示:Notice: iconv(): Detected an illegal character in input string。
翻查手册,看到以下说明
如果你在 out_charset 后添加了字符串 //TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。
如果你添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则, str 从第一个无效字符开始截断并导致一个 E_NOTICE 。
原来iconv遇到不能识别的内容,会从第一个不能识别的字符开始截断,并生成一个E_NOTICE。因此后边的内容被丢弃了。
而在输出字符集后加上//IGNORE则只丢弃不能识别的内容,而不会截断和丢弃后面的内容。
修改程序后一切正常

Tips:使用iconv时,如果要使用UTF-8编码的,请使用UTF-8而不要使用UTF8,因为UTF8有些服务器会有问题。
希望本文所述对大家的php程序设计有所帮助。
            
            
您可能感兴趣的文章:
  • MSSQL 将截断字符串或二进制数据问题的解决方法
  • PHP在字符断点处截断文字的实现代码
  • js中根据字数截取字符串,不能截断url
  • C# double和decimal数据类型以截断的方式保留指定的小数位数
  • c#完美截断字符串代码(中文+非中文)
  • PHP UTF8中文字符截断函数代码
  • oracle中截断表的使用介绍
  • PHP截断标题且兼容utf8和gb2312编码
  • PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
  • js实现文字截断功能
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端