手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:htmlpurifier

HtmlPurifier的一个小问题:处理flash

在没有TIdy库的情况下,修复HTML我们是用htmlPurifier类库,但这个类库有点小问题。。。比如,对flash支持不好,虽然官网上有例子,可以支持yotube,不过,国内的flash视频站很多,我们不可能一一写扩展啦。怎么办?

后来有人说:

PHP代码
  1. $config->set('HTML.SafeObject', true);  
  2. $config->set('Output.FlashCompat', true);  
  3. $config->set('HTML.Allowed''object[width|height|data],param[name|value],embed[src|type|allowscriptaccess|allowfullscreen|width|height]');  

但经过测试,发现这样也不行。。不信?你去官网的Demo.php中测试一下就知道了。

测试代码可以是:
http://htmlpurifier.org/demo.php?filter[HTML.SafeObject]=1&filter[Output.FlashCompat]=1&filter[HTML.Allowed]=object[width|height|data],param[name|value],embed[src|type|allowscriptaccess|allowfullscreen|width|height]&html=%3Cp%3E%3C%2Fp%3E%3Cp%3E%3Cembed+src%3D%22http%3A%2F%2Fplayer.youku.com%2Fplayer.php%2Fsid%2FXMzIwMjQ5NTk2%2Fv.swf%22+allowfullscreen%3D%22true%22+quality%3D%22high%22+width%3D%22480%22+height%3D%22400%22+align%3D%22middle%22+allowscriptaccess%3D%22always%22+type%3D%22application%2Fx-shockwave-flash%22%2F%3E%3C%2Fp%3E&submit=Submit

所以。如果stripos($data,"embed")!==false的话,还是不要用htmlpurifier过滤了。

参考:
1、http://htmlpurifier.org/docs/enduser-youtube.html(文中有为什么不支持embed的说明)

  1. <embed> is not recognized by W3C, so if you want standards-compliant code, you'll have to get rid of it.
  2. The code is exactly the same for all instances, except for the identifier AyPzM5WK8ys which tells us which movie file to retrieve.

2、http://stackoverflow.com/questions/1368809/allow-embed-object-param-html-tags-with-htmlpurifier(即使设置了allowed,还是不行)
3、http://htmlpurifier.org/phorum/read.php?5,2239,page=3 (在这里,也还是没有解决。寄希望于下一版了。。。)

Tags: htmlpurifier

tidy参数引发的问题

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,所以就不正常了?转换有问题?)没有很多时间解决这个问题,主要是被他折腾了一天,所以记录一下。

Tags: tidy, htmlpurifier

HTML Purifier库

好吧,上文我说到了HtmlPurifier这个类库,很多人还是云里雾里的,确实,对于国外那些相对比较标准的页面来说,嗯。这些都确实是云里雾里的,但国内还是需要这样的。
它适用于几种场景
1、采集,这个就不用说啦,采的不标准的话,HTML 标签可能不闭合
2、所见所得编辑器:如果COPY一段网上的文章进所见所得编辑器,可能会不闭合,因为你不能保证你复制的内容是一定闭合(大部分编辑器会帮你修复这种问题)
3、还是所见所得编辑器。在这种编辑器里,如果你在内容里加上分页标记,再由他自动分页,则可能会遇到HTML标记不全的情况(这在supesite中特别 多见,但可以理解)

因此,有PHP tidy库的人就有福了,但tidy库需要在服务器上编译,不是很方便,毕竟不是每个人都有服务器的。所以,HtmlPurifier类库就起作用了。
官方这么介绍:

XML/HTML代码
  1. HTML Purifier is a standards-compliant  HTML filter library written in   PHP. HTML Purifier will not only remove all malicious   code (better known as XSS) with a thoroughly audited,    secure yet permissive whitelist,    it will also make sure your documents are     standards compliant, something only achievable with a     comprehensive knowledge of W3C's specifications.     Tired of using BBCode due to the current landscape of deficient or     insecure HTML filters? Have a  WYSIWYG editor but never been able to use it? Looking     for high-quality, standardscompliant, open-source components for that     application you're building? HTML Purifier is for you!  

如果对这个类库还不清楚,你可以看一下这里的demo:http://htmlpurifier.org/demo.php
尝试输入<div><p></div>
然后提交一下,你就知道了

Tags: htmlpurifier

基于PHP版本的 Readability 库

说起readability或许知道的人还真的不是特别多,其实 这是一个工作室,叫arc90的开发的一个JS类库,作用是方便各种掌上设备在阅读页面的时候可以只关注真正的内容部分,而忽略掉那些无关的广告或者其他标记。
这,对于国内的开发人员来说,那就是采集利器了,因为在这种情况下,页面里剩下的内容就只有文章主体了。这个结果,你懂的。
arc90这个工作室或许很多人不知道,但flipboard很多人应该听说过,做IPAD上资讯类阅读软件开发的人员应该会知道这个软件啦。
不多说了,我这里是转的PHP版的readability的库,上面的一些内容,转载的文章中也有介绍,可以LOOK一下先,原文来自:http://blog.zol.com.cn/2615/article_2614448.html

阅读是汲取知识的途径之一,但烦杂的网页提了额外我们诸多不需要的信息,这有时候非常干扰我们阅读。回归阅读 内容的本身,其实通过Readability 这个脚本 就能抽取页面的主体内容。

不过,Readability 提供的仅仅是个 Bookmarklet,如果我们需要将其导出、打印等操作时就显 得捉衿见肘。需求驱动行动,于是就有了这个 PHP 库。PS,同时您还可以找到 .net 版本的 Readability,以及 node.js 版本的 Readability

这个库能做的事情非常的简单,就是找到页面的主体内容并返回。调用这个库非常的容易,实例代码如下:

PHP代码
  1. require 'lib/Readability.inc.php';  
  2. $Readability = new Readability($html$html_input_charset); // default charset is utf-8  
  3. $ReadabilityData = $Readability->getContent();    
  4. echo "".$ReadabilityData['title']."";   
  5. echo $ReadabilityData['content'];  

如果您不在意技术本身,那么这里有个现成的线上工具。只需要粘贴入需要阅读的网页链接,这个工具就能够重新生成适合阅读的页面(例如: 原页面Readability 以后的页面)。

大小: 185.14 K
尺寸: 495 x 376
浏览: 1344 次
点击打开新窗口浏览全图

然后利用 Mac 的 pdf 打印输出功能,就能非常方便在 kindle 等阅读器上使用。

Q&A

输出的页面似乎有乱码?

PHP Readability 库能够指定输入的字符编码并统一返回 utf-8 编码的字符串。如果您在处理过程中碰到了乱码问题,请调整下字符编码。如果还是有问题,欢迎您的反馈。

有些页面提取内容失败或者提取不正确?

Readability 提取的算法其实非常有限。如果页面本身的 HTML 标签不是非常合乎规范,那么提取可能会造成一定的困扰。通常这在国内的页面上会更常见些,同样欢迎您的反馈,这有利于我继续改进 PHP Readability 的算法。

最后,希望这个库和工具能让你找回阅读的乐趣。

------------------------
嗯,在使用这个软件的时候,如果发现HTML标准不规范(你懂的,国内的网页,有超过50%以上的页面是不规范的,嗯,标签不闭合的都有很多),请使用PHP的tidy库修复一下,如果没有tidy库,那就用htmlpurifier修复一下吧。
顺便:YII的自带扩展中已经包含htmlpurifier插件。

 

Tags: readability, arc90, flipboard, tidy, htmlpurifier