【问题标题】:How to validate HTML with RSS?如何使用 RSS 验证 HTML?
【发布时间】:2010-11-21 17:16:15
【问题描述】:

我正在努力加快 HTML/CSS/PHP 开发的速度,并且想知道当我的代码包含我无法控制的内容(如 RSS 提要)时我应该如何验证它?

例如,我的主页是一个包含 HTML 和 PHP 代码的 .php 文档。我使用 PHP 创建了一个简单的 RSS 阅读器(使用 SimpleXML)从另一个博客中获取一些提要并将它们显示在我的网页上。

现在,我想尽可能地尝试编写有效的 HTML。所以我假设这样做的方法是在浏览器中查看页面(我使用的是 NetBeans,所以我单击“预览页面”),复制源代码(使用查看源代码),并将其粘贴到 W3C 的验证器中。当我这样做时,我会收到来自 RSS 提要的各种验证错误(例如“无法为通用实体生成系统标识符”和“通用实体“blogId”未定义且没有默认实体”)。

我是否遵循了正确的流程?我应该忽略 RSS 提要中标记的所有错误吗?

谢谢。

【问题讨论】:

    标签: php html css validation


    【解决方案1】:

    在这种情况下,当您处理不受控制的不受信任的提要时,您的安全选择有限。

    想到的两个是:

    1. 使用 striptags() 之类的东西来去除 RSS 提要内容的所有格式。
    2. 使用HTMLPurifier 之类的库在输出前验证和清理内容。

    为了性能,您应该缓存输出就绪的内容,仅供参考。

    --

    关于缓存

    有很多方法可以做到这一点...如果您使用的是框架,很可能它已经有方法可以做到这一点。例如 Zend_Cache 是 Zend 框架提供的一个类。

    如果您可以访问 memcached,那么这非常容易。但如果你不这样做,那么还有很多其他方法。

    一般的概念是准备输出,然后存储,准备好多次输出。这样,如果每次输出都相同,您就不会产生获取和准备输出的开销。

    考虑一下这段代码,它只会每 5 分钟获取和格式化 RSS 提要...所有其他请求都是快速的readfile() 命令。

    # When called, will prepare the cache
    function GenCache1()
    {
        //Get RSS feed
        //Parse it
        //Purify it
        //Format your output
        file_put_contents('/tmp/cache1', $output);
    }
    
    # Check to see if the file is available
    if(! file_exists('/tmp/cache1'))
    {
        GenCache1();
    }
    else
    {
        # If the file is older than 5 minues (300 seconds), then regen
        $a = stat('/tmp/cache1');
        if($a['mtime'] + 300 < time())
           GenCache1();
    }
    
    
    # Now, simply use this code to output
    readfile('/tmp/cache1');
    

    【讨论】:

    • 谢谢,我认为这样的事情可能是必要的。另外,您能否进一步解释一下缓存输出就绪内容的含义,并让我知道(一般而言)我将如何做到这一点?
    【解决方案2】:

    我一般使用HTML Tidy来清理系统外的数据。

    【讨论】:

    • 但这在这种情况下是行不通的,不是吗?我正在使用 HTML Tidy(刚开始使用它,所以我不知道它的所有功能),虽然它会标记所有这些错误并提供清理它们,但从长远来看,我看不出这有什么帮助,因为我的页面只会抓取另一个 RSS 提要,这将在下次触发相同的错误。 (例如不转义&符号。)我想我必须在输出之前以某种方式对代码进行清理,如下面的 gahooa 所述。
    • 我的意思是:将 HTML Tidy 集成到您的页面生成系统中。
    【解决方案3】:

    RSS 应始终与 XML 兼容。所以我建议你在你的网站上使用 XHTML。由于 XHTML 也与 XML 兼容,因此在使用 RSS 验证 XHTML 页面时不应出现任何错误。

    编辑: 当然,这仅在您获取的内容实际上是有效的 XML 时才计算在内...

    【讨论】:

    • RSS 可以包含 XML 编码的标签汤。因此,虽然它可能符合 XML,但它携带的数据可能不符合 HTML 片段。
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2014-04-11
    • 2011-04-20
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多