PHP-RSS构建器
时间:2020-03-05 18:58:47 来源:igfitidea点击:
我有一个旧网站,每次创建新帖子时都会生成自己的RSS。当我在装有PHP 4的服务器上时一切正常,但是现在将主机更改为PHP 5,我一直都有一个"格式错误的XML"。我正在使用xml_parser_create()和xml_parse(...)和fwrite(..)保存所有内容。
这是保存时的示例(我在保存之前先读了一下,以添加旧的RSS行)。
function SaveXml() { if (!is_file($this->getFileName())) { //Création du fichier $file_handler = fopen($this->getFileName(),"w"); fwrite($file_handler,""); fclose($file_handler); }//Fin du if //Header xml version="1.0" encoding="utf-8" $strFileData = '<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>'.$this->getProjectName().'</title><link>http://www.mywebsite.com</link><description>My description</description><lastBuildDate>' . date("r"). '</lastBuildDate>'; //Data reset($this->arrData); foreach($this->arrData as $i => $value) { $strFileData .= '<item>'; $strFileData .= '<title>'. $this->GetNews($i,0) . '</title>'; $strFileData .= '<pubDate>'. $this->GetNews($i,1) . '</pubDate>'; $strFileData .= '<dc:creator>'. $this->GetNews($i,2) . '</dc:creator>'; $strFileData .= '<description><![CDATA['. $this->GetNews($i,3) . ']]> </description>'; $strFileData .= '<link><![CDATA['. $this->GetNews($i,4) . ']]></link>'; $strFileData .= '<guid>'. $this->GetNews($i,4) . '</guid>'; //$strFileData .= '<category>'. $this->GetNews($i,5) . '</category>'; $strFileData .= '<category>Mycategory</category>'; $strFileData .= '</item>'; }//Fin du for i $strFileData .= '</channel></rss>'; if (file_exists($this->getFileName()))//Détruit le fichier unlink($this->getFileName()); $file_handler = fopen($this->getFileName(),"w"); fwrite($file_handler,$strFileData); fclose($file_handler); }//Fin de SaveXml
我的问题是:如何在PHP中创建和填充RSS?
解决方案
回答
我将使用simpleXML创建所需的结构并导出XML。然后,使用file_put_contents()将其缓存到磁盘。
回答
过去,我曾经使用过LGPL许可的feedcreator类,在我非常简单的使用中,它的效果很好。
回答
PHP5现在带有SimpleXML
扩展名,如果需求不复杂的话,这是一种构建有效XML的快速方法。
但是,我们所建议的问题似乎不是实现问题,而更多是语法问题。也许我们可以使用代码示例或者生成的XML副本来更新问题。
回答
没有完整的答案,但是我们不必解析自己的XML。它将损害性能和可靠性。
但是,请务必确保其格式正确。如果我们手动或者使用通用工具生成它,应该不会很困难。还是我们包含的HTML毁了它?
回答
有很多事情会使XML格式错误。字符实体(XML标记之间的数据中的" <",">"或者"&")可能存在问题。连接字符串时,请尝试通过htmlentities()运行数据库中的任何输出。我们是否有生成的XML的示例供我们查看,以便我们了解问题出在哪里?
回答
在swcombine.com,我们使用Feedcreator。使用那个,问题将消失。 :)
这是安装后使用它的PHP代码:
function feed_simnews() { $objRSS = new UniversalFeedCreator(); $objRSS->title = 'My News'; $objRSS->link = 'http://link.to/news.php'; $objRSS->description = 'daily news from me'; $objRSS->xsl = 'http://link.to/feeds/feedxsl.xsl'; $objRSS->language = 'en'; $objRSS->copyright = 'Copyright: Mine!'; $objRSS->webmaster = '[email protected]'; $objRSS->syndicationURL = 'http://link.to/news/simnews.php'; $objRSS->ttl = 180; $objImage = new FeedImage(); $objImage->title = 'my logo'; $objImage->url = 'http://link.to/feeds/logo.jpg'; $objImage->link = 'http://link.to'; $objImage->description = 'Feed provided by link.to. Click to visit.'; $objImage->width = 120; $objImage->height = 60; $objRSS->image = $objImage; //Function retrieving an array of your news from date start to last week $colNews = getYourNews(array('start_date' => 'Last week')); foreach($colNews as $p) { $objItem = new FeedItem(); $objItem->title = $p->title; $objItem->description = $p->body; $objItem->link = $p->link; $objItem->date = $p->date; $objItem->author = $p->author; $objItem->guid = $p->guid; $objRSS->addItem($objItem); } $objRSS->saveFeed('RSS2.0', 'http://link.to/feeds/news.xml', false); };
非常吻。 :)