目前无法通过W3C RSS Validator获取我的RSS Feed以进行验证。似乎时间/日期存在问题。如果单击W3C链接,它将显示错误。当我评论它的日期工作正常,但日期是有点关键!!
这是原始脚本:
include "db.php";
header("Expires: 0");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("cache-control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: text/xml");
print "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
?>
<rss version="2.0">
<channel>
<title>MediWales Events</title>
<description>The latest Events, updates and announcements from MediWales.</description>
<link>http://www.mediwales.com</link>
<copyright>Copyright 2011 MediWales.</copyright>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<language>en-us</language>
<lastBuildDate><? print date("D, d M Y H:i:s"); ?> 0000</lastBuildDate>
<managingEditor>info@mediwales.com</managingEditor>
<pubDate><? print date("D, d M Y H:i:s"); ?> 0000</pubDate>
<webMaster>info@mediwales.com</webMaster>
<generator>codeworks rss script (1.0.0)</generator>
<image>
<url>http://mediwales.com/login/uploaded/template/logo.png</url>
<title>MediWales Website</title>
<link>http://www.mediwales.com</link>
<description>The latest Events, updates and announcements from MediWales.</description>
<width>144</width>
<height>52</height>
</image>
<?
$latestnews = mysql_query("SELECT myevents.*, myevents_dates.datefrom from myevents, myevents_dates WHERE myevents_dates.datefrom >= CURDATE() AND myevents.id = myevents_dates.eventid order by myevents_dates.datefrom");
while ($news = mysql_fetch_assoc($latestnews)) {
$datetime = explode(" ",$news[datefrom]);
$date = explode("-",$datetime[0]);
$time = explode(":",$datetime[1]);
$news[description] = strip_tags($news[description]);
$news[description] = htmlspecialchars($news[description]);
echo "<item>";
echo "<title>".mb_convert_encoding(htmlspecialchars($news[title]),"US-ASCII")."</title>";
echo "<description>".mb_convert_encoding(substr($news[description],0, 250),"US-ASCII")."</description>";
echo "<link>http://www.mediwales.com/index.php?id=4&nid=$news[id]</link>";
echo "<pubDate>".date('D, d M Y H:i:s O', mktime($time[0],$time[1],$time[2],$date[1],$date[2],$date[0]))."</pubDate>";
echo "</item>";
}
?>
</channel>
</rss>
答案 0 :(得分:2)
请注意,唯一的错误是在第56行:
nbsp;&</description>
应该是:
nbsp;&</description>
问题是你正在调用htmlspecialchars然后调用substr,所以最后一个&amp;被截断为&amp;,这会使您的Feed无效。首先调用substr,然后调用htmlspecialchars,以解决此问题。
其他的事情(“电子邮件地址缺少真实姓名”,“项目应该包含guid元素”)只是建议:你应该遵循它们,因为它们是好主意,但是它们会使提要无法通过验证。
答案 1 :(得分:0)
您需要修复许多其他错误(例如在HTML实体中间切断)。但它们为每个人提供了帮助链接。
具体参考日期错误,如果您按照其帮助链接,您会看到此警告的可能原因之一是日期是将来的。他们抱怨的日期是“难以置信的日期:星期一,2011年3月7日00:00:00 +0000”。今天是2011年3月1日,所以2011年3月7日确实是未来。
如果你继续阅读他们的Help link,他们会解释为什么这是一个问题。修复不包括Feed中的未来日期。
答案 2 :(得分:0)
我认为他们抱怨你正在使用未来的日期。
如果是这样,那不是,imho,声明您的Feed无效的理由。现实世界的出版物通常会在未来出版。
规范,这是对此的实际权威并未说明将来发布者有任何问题。
http://cyber.law.harvard.edu/rss/rss.html
验证者也可能有错误。 : - )
答案 3 :(得分:0)
我通过在我的实际网站上删除一些html字符暂时解决了这个问题,因此Feed没有抓住它们。
我知道当我们抓住下一组Feed时可能会出现问题,但此刻急于修复。