新的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");
}
基本上以上写法大部分能解决编码问题
版权属于:
转载时必须以链接形式注明原始出处及本声明。