tidy库对于我们处理非标准HTML来说是一个好工具,当然,由于他需要在服务器上配置,所以相对就较少人用它,而是HtmlPurifier,毕竟它不需要在服务器上配置直接就可以配置着用了。
为什么我们会用这些工具呢?主要还是由于国内做页面啊,那是相当的不小心,不是这里标签不闭合,就是大小写混用,对于我们做页面分析的来说,就痛苦很多了。肿么办肿么办?
OK,htmlpurifier和tidy库就是帮我们解决这些问题的小工具。
这次要讲的是tidy库参数引发的问题,tidy的函数其实不多,平时我们一般只用tidy_repair_string或者tidy_repair_file就完了,可是就是因为这个REpair导致我的代码出了点问题
tidy_repair_string共需要三个参数,第一个参数string就不用提了,第二个参数是config,第三个参数是encoding。
NND,明明config数组中就可以指定encoding的,为什么还要用第三个参数??
我在处理的时候,在config中指定了input-encoding和output-encoding,分别是实际的编码,但在处理完后。发现有问题,好象页面中有几个字符被处理坏了。导致了UTF-8不认。
最后,只能tidy_repair_string($string,null,"UTF-8");
但这样,好象还是有问题,因为tidy支持的编码都是utf8之类的,参考:http://tidy.sourceforge.net/docs/quickref.html
LOOK:Example: raw, ascii, latin0, latin1, utf8, iso2022, mac, win1252, ibm858, utf16le, utf16be, utf16, big5, shiftjis
因此,写UTF-8有可能会出错(我没有仔细试)
上面的:tidy_repair_string($string,null,"UTF-8");其实还是错的,PHP报错说是找不到 指定的配置文件。所以NULL不能直接用啊,tidy_repair_string($string,array("wrap"=>0),"utf8")
直接解决问题。
(事实上,我一直在怀疑我的页面中是否有一些字符串tidy库处理的有问题,比如一些特殊字符,正如上面所写的,它支持的编码有问题,而我写的input-encoding为gb2312,所以就不正常了?转换有问题?)没有很多时间解决这个问题,主要是被他折腾了一天,所以记录一下。