如何使用RSS验证HTML?

时间:2009-08-21 15:54:15

标签: php html css validation

我正在努力加快HTML / CSS / PHP的开发速度,并想知道如果我的代码包含我无法控制的内容,如RSS源,我应该如何验证我的代码?

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

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

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

感谢。

3 个答案:

答案 0 :(得分:4)

在这种情况下,如果您处理不受控制的Feed不受信任,那么您的安全选择有限。

我想到的两个是:

  1. 使用striptags()之类的内容从RSS Feed内容中获取所有格式。
  2. 在输出之前使用像HTMLPurifier这样的库来验证和清理内容。
  3. 为了提高性能,您应该缓存输出就绪内容,FYI。

    -

    关于缓存

    有很多方法可以做到这一点......如果您使用的是框架,很可能已经有了实现这一目标的方法。 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');
    

答案 1 :(得分:1)

我通常使用HTML Tidy来清理系统外部的数据。

答案 2 :(得分:0)

RSS应始终符合XML标准。所以我建议你在你的网站上使用XHTML。由于XHTML也符合XML,因此在使用RSS验证XHTML页面时不应该有任何错误。

编辑: 当然,这只取决于您获得的内容实际上是否有效的XML ...