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

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
浏览: 1725 次
点击打开新窗口浏览全图

然后利用 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

一个疏忽引发的血案

这是一个PHP的函数,可以把相对路径转为绝对路径。比如可以把http://www.neatstudio.com/archive/../upload/xxx.jpg,转换成http://www.neatstudio.com/upload/xxx.jpg

PHP代码
  1. function getRealUrl($url) {  
  2.         $path = parse_url($url, PHP_URL_PATH);  
  3.         $patharr = explode("/"$path);  
  4.         $newarr = array();  
  5.         $i = 0;  
  6.         foreach ($patharr as $k => $val) {  
  7.             if ($k != 0 && !$val) {  
  8.                 continue;  
  9.             }  
  10.             if ($val == '..' && count($newarr) > 1) {  
  11.                 unset($newarr[$i - 1]);  
  12.                 $i--;  
  13.                 continue;  
  14.             }  
  15.             $newarr[$i] = $val;  
  16.             $i++;  
  17.         }  
  18.         $newpath = join("/"$newarr);  
  19.         return str_replace($path$newpath$url);  
  20.     }  

正常情况下,都没什么问题。但某一天,居然遇到了这样的网址:http://neatstudio.com/xxx/xxx/../0/abc.jpg,于是就出错了,返回成http://neatstudio.com/xxx/abc.jpg
细心的朋友可能发现了上面的问题,/0这个目录不见了。这是为什么呢??

居然是因为第7行 ,我对$val的判断是!$val。。。它认为0目录是不为真就跳过了。TNND,所以我改成了$val == '',真纠结。

粗心啊(请不要纠结上面的代码。花10分钟写的东西,质量不高是肯定的。)

Yii + Zend_Feed

YII是一个PHP框架。
ZendFramework也是一个PHP框架
在Yii里配置ZF框架,刷刷的就一个RSS阅读器就出来了。
代码很简单,把Zend整合COPY到protected/extensions目录下
在控制器的init方法里加入:
Yii::import("ext.*");
require_once("Zend_Feed_Reader.php");

然后在需要的方法里加入
$feed = Zend_Feed_Reader::import("http://neatstudio.com/rss.php");
这样就创建了一个读的对象了。然后。。。。。
你懂的:

PHP代码
  1. $data = array(  
  2.     'title'        => $feed->getTitle(),  
  3.     'link'         => $feed->getLink(),  
  4.     'dateModified' => $feed->getDateModified(),  
  5.     'description'  => $feed->getDescription(),  
  6.     'language'     => $feed->getLanguage(),  
  7.     'entries'      => array(),  
  8. );  
  9.   
  10. foreach ($feed as $entry) {  
  11.     $edata = array(  
  12.         'title'        => $entry->getTitle(),  
  13.         'description'  => $entry->getDescription(),  
  14.         'dateModified' => $entry->getDateModified(),  
  15.         'authors'       => $entry->getAuthors(),  
  16.         'link'         => $entry->getLink(),  
  17.         'content'      => $entry->getContent()  
  18.     );  
  19.     $data['entries'][] = $edata;  
  20. }  
  21. print_r($data);  

就这样,一个刚刚的RSS阅读器就出来了。
当然,它没有缓存,没有这没有那的,不过,都解析完了,剩下的功能还会远吗?

Tags: yii, zend

HTML中尺寸对比

做网页的时候,总是会用到一些尺寸,那么这些尺寸的规格又各是什么呢?这里有个表格可以做个简单的对比,可以让你在看到这些尺寸的时候能够知道如何进行换算成自己所熟悉的尺寸单位:

 

Points

Pixels

Ems

Percent

6pt

8px

0.5em

50%

7pt

9px

0.55em

55%

7.5pt

10px

0.625em

62.5%

8pt

11px

0.7em

70%

9pt

12px

0.75em

75%

10pt

13px

0.8em

80%

10.5pt

14px

0.875em

87.5%

11pt

15px

0.95em

95%

12pt

16px

1em

100%

13pt

17px

1.05em

105%

13.5pt

18px

1.125em

112.5%

14pt

19px

1.2em

120%

14.5pt

20px

1.25em

125%

15pt

21px

1.3em

130%

16pt

22px

1.4em

140%

17pt

23px

1.45em

145%

18pt

24px

1.5em

150%

20pt

26px

1.6em

160%

22pt

29px

1.8em

180%

24pt

32px

2em

200%

26pt

35px

2.2em

220%

27pt

36px

2.25em

225%

28pt

37px

2.3em

230%

29pt

38px

2.35em

235%

30pt

40px

2.45em

245%

32pt

42px

2.55em

255%

34pt

45px

2.75em

275%

36pt

48px

3em

300%


其实本来已经发表了,但不知怎么的,文章消失了。郁闷,只好重发一遍,其实也是给自己做个参考了。