Submitted by gouki on 2011, August 20, 9:32 PM
好吧,上文我说到了HtmlPurifier这个类库,很多人还是云里雾里的,确实,对于国外那些相对比较标准的页面来说,嗯。这些都确实是云里雾里的,但国内还是需要这样的。
它适用于几种场景
1、采集,这个就不用说啦,采的不标准的话,HTML 标签可能不闭合
2、所见所得编辑器:如果COPY一段网上的文章进所见所得编辑器,可能会不闭合,因为你不能保证你复制的内容是一定闭合(大部分编辑器会帮你修复这种问题)
3、还是所见所得编辑器。在这种编辑器里,如果你在内容里加上分页标记,再由他自动分页,则可能会遇到HTML标记不全的情况(这在supesite中特别 多见,但可以理解)
因此,有PHP tidy库的人就有福了,但tidy库需要在服务器上编译,不是很方便,毕竟不是每个人都有服务器的。所以,HtmlPurifier类库就起作用了。
官方这么介绍:
XML/HTML代码
- 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 | 评论:0
| 阅读:17165
Submitted by gouki on 2011, August 20, 9:24 PM
说起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代码
- require 'lib/Readability.inc.php';
- $Readability = new Readability($html, $html_input_charset);
- $ReadabilityData = $Readability->getContent();
- echo "".$ReadabilityData['title']."";
- echo $ReadabilityData['content'];
如果您不在意技术本身,那么这里有个现成的线上工具。只需要粘贴入需要阅读的网页链接,这个工具就能够重新生成适合阅读的页面(例如: 原页面、Readability 以后的页面)。

然后利用 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 | 评论:0
| 阅读:19510
Submitted by gouki on 2011, August 19, 10:33 AM
这是一个PHP的函数,可以把相对路径转为绝对路径。比如可以把http://www.neatstudio.com/archive/../upload/xxx.jpg,转换成http://www.neatstudio.com/upload/xxx.jpg
PHP代码
- function getRealUrl($url) {
- $path = parse_url($url, PHP_URL_PATH);
- $patharr = explode("/", $path);
- $newarr = array();
- $i = 0;
- foreach ($patharr as $k => $val) {
- if ($k != 0 && !$val) {
- continue;
- }
- if ($val == '..' && count($newarr) > 1) {
- unset($newarr[$i - 1]);
- $i--;
- continue;
- }
- $newarr[$i] = $val;
- $i++;
- }
- $newpath = join("/", $newarr);
- return str_replace($path, $newpath, $url);
- }
正常情况下,都没什么问题。但某一天,居然遇到了这样的网址:http://neatstudio.com/xxx/xxx/../0/abc.jpg,于是就出错了,返回成http://neatstudio.com/xxx/abc.jpg
细心的朋友可能发现了上面的问题,/0这个目录不见了。这是为什么呢??
居然是因为第7行 ,我对$val的判断是!$val。。。它认为0目录是不为真就跳过了。TNND,所以我改成了$val == '',真纠结。
粗心啊(请不要纠结上面的代码。花10分钟写的东西,质量不高是肯定的。)
PHP | 评论:3
| 阅读:15509
Submitted by gouki on 2011, August 17, 12:44 AM
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代码
- $data = array(
- 'title' => $feed->getTitle(),
- 'link' => $feed->getLink(),
- 'dateModified' => $feed->getDateModified(),
- 'description' => $feed->getDescription(),
- 'language' => $feed->getLanguage(),
- 'entries' => array(),
- );
-
- foreach ($feed as $entry) {
- $edata = array(
- 'title' => $entry->getTitle(),
- 'description' => $entry->getDescription(),
- 'dateModified' => $entry->getDateModified(),
- 'authors' => $entry->getAuthors(),
- 'link' => $entry->getLink(),
- 'content' => $entry->getContent()
- );
- $data['entries'][] = $edata;
- }
- print_r($data);
就这样,一个刚刚的RSS阅读器就出来了。
当然,它没有缓存,没有这没有那的,不过,都解析完了,剩下的功能还会远吗?
Tags: yii, zend
PHP | 评论:0
| 阅读:19213
Submitted by gouki on 2011, August 13, 12:32 AM
做网页的时候,总是会用到一些尺寸,那么这些尺寸的规格又各是什么呢?这里有个表格可以做个简单的对比,可以让你在看到这些尺寸的时候能够知道如何进行换算成自己所熟悉的尺寸单位:
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%
|
其实本来已经发表了,但不知怎么的,文章消失了。郁闷,只好重发一遍,其实也是给自己做个参考了。
PHP | 评论:0
| 阅读:13562