我正在努力加快HTML / CSS / PHP的开发速度,并想知道如果我的代码包含我无法控制的内容,如RSS源,我应该如何验证我的代码?
例如,我的主页是一个包含HTML和PHP代码的.php文档。我使用PHP创建一个简单的RSS阅读器(使用SimpleXML)从另一个博客中获取一些提要并在我的网页上显示它们。
现在,我想尽可能地尝试编写有效的HTML。所以我假设这样做的方法是在浏览器中查看页面(我使用NetBeans,所以我点击“预览页面”),复制源(使用View Source),并将其粘贴在W3C的验证器中。当我这样做时,我会从RSS提要中获得各种验证错误(例如“无法生成一般实体的系统标识符”和“一般实体”blogId“未定义且没有默认实体”)。
我是否遵循了正确的流程?我应该忽略RSS提要中标记的所有错误吗?
感谢。
答案 0 :(得分:4)
在这种情况下,如果您处理不受控制的Feed不受信任,那么您的安全选择有限。
我想到的两个是:
striptags()
之类的内容从RSS Feed内容中获取所有格式。HTMLPurifier
这样的库来验证和清理内容。为了提高性能,您应该缓存输出就绪内容,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 ...