linux采集设备命令编码出错,LINUX下用THINKPHP CLI采集GB2312网页遇到[think\exception\ErrorException] iconv(): Unknown e...

新的thinkphp5上市后我就一直没机会使用,终于等到项目空档期准备开始入门,由于有网上提供tpAdmin使得入门变的很简单,后台三两下搞定,接着开始尝试CLI模式,tp5的CLI与原来tp3.2.3完全不同,连执行命令的方式都变了,于是根据需求尝试写了一个采集,由于采集的页面是GB2312的,一开始就没什么好感,后来真的花了一天时间去折腾,编码嘛主要问题在于转码和判断编码规则

首先给出判断编码规则

$encode=mb_detect_encoding($name,array("ASCII",'UTF8','GB2312',"GBK",'BIG5'));

说真的,我并不觉得这个好用,但是没找到其他方法,一来返回的不是后面的值,而是类似EUC-CN,二来有些生僻字会返回false,只能将就点用。

其次,使用simple_html_dom.php会出现标题所说的错误

[think\exception\ErrorException]

iconv(): Unknown error (84)

经过几次调试,遇到这个错误一般是由于编码调用的源编码错误,所以上面才需要用到上面的编码判断,目前我直接采用了彻底解决方案,而不采用网上常说的,两个都列出来

$converted_text=iconv($sourceCharset,$targetCharset."//TRANSLIT//IGNORE", $text);//网上推荐方案,

$sourceCharset = $sourceCharset=="GB2312"?"GBK":"GB2312";

$converted_text=mb_convert_encoding($text,$targetCharset,$sourceCharset);

通常的编码遇到上面都能过,还有一部分特别顽固的会报另外一个错误

[think\exception\ErrorException]

iconv(): Unknown error (22)

遇到这个错误呢!没招一般就是你传入的编码不对,目前的解决方案是先判断编码,如果是gb2312,需要先做转码后再提交

$encode=mb_detect_encoding($name,array("ASCII",'UTF8','GB2312',"GBK",'BIG5'));

if($encode=="EUC-CN"){

$name = mb_convert_encoding($name,'UTF-8',"GB2312");

}

基本上以上写法大部分能解决编码问题

版权属于:

转载时必须以链接形式注明原始出处及本声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值