一个无可奈何的问题

#1 danny.yan

我用sp做了一个采集的程序帮公司收集客户,用的过程中出现了这样的问题,就是某些汉字,在识别的时候被弄成了utf8乱码,在存入mysql的时候,出现了这样的问题,
因为我是批量采集,一个半个的无所谓,这样是不是要在config中开通自己捕获啊,
'sp_error_throw_exception' => TRUE // 开启异常抛出
还有没有其他办法,就是让我指定的几个数据库操作抛出异常,其他的还是按照默认,这种设置有么?
翻过手册了没找到,确认下,看是否有别的办法。

另外,这种字符的识别和过滤方法,大家有没有好的主意

INSERT INTO customers (title,url,source,cat_id,created,isok) VALUES ('�Ȩ','http://tchg08.cn.makepolo.com/contact_us.html','马可波罗','149071','2013-03-08 15:34:10',0)
执行错误: Incorrect string value: '\xC1\xBA\xC8\xA8' for column 'title' at row 1

2013-03-08 16:42:35

#2 jake

在入库之前,全部数据用iconv来转码成UTF8一次。

字符串转码函数iconv,可以参考PHP官方手册

2013-03-08 18:13:12

#3 danny.yan

没有描述清楚问题,大神见谅!

这个,我已经这样尝试过,我用simple_dom_php对html进行了处理,原网页是gb2312的,在处理之前首先转码会导致识别有问题,所以没法在simple_dom_php处理之前  使用iconv,在simple_dom_php之后,汉字被自动转码,只是有些特定汉字,比如 “蜡”等少数汉字(目前无法确定范围)。会变成乱码,目测可能是在gb转utf8时部分识别错误,导致单个字转换错误。 目前打开 sp的trycatch跳过此项没有问题。只是我想探讨一下,已经是utf8的汉字串,如果当中有部分汉字是utf8乱码的情况下的过滤方式。

另我问的是sp抛出异常的设置方式。有没有临时对sperror的设定方式,因为除了少数几个操作之外,还是习惯使用sp的调试模式的。


2013-03-09 10:24:13

#4 jake

iconv有个参数设置可以避免出错的(忽略非目标编码),你可以试试。

如果在调试模式下,临时用抛出模式,可以临时把 $GLOBALS['G_SP']['sp_error_throw_exception'] 赋值 1

2013-03-09 14:45:02

#5 danny.yan

iconv("GB2312","UTF-8//IGNORE",$data);
受教了,谢谢

2013-03-09 21:48:17

#6 totalstotal

支持一下~

2013-03-11 10:04:24