当我从本地主机上的 MySQL 数据库制作 XML RSS Feed 时,出现以下错误:
文档末尾的额外内容
这是我的代码:
<?php
// PDO connect *********
function connect() {
return new PDO('mysql:host=localhost;dbname=lookout', 'admin', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
$pdo = connect();
// posts *******************************
$sql = 'SELECT * FROM `event` ORDER BY serial DESC';
$query = $pdo->prepare($sql);
$query->execute();
$rs_post = $query->fetchAll();
// The XML structure
$data .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">';
$data .= '<channel>';
foreach ($rs_post as $row) {
$data .= '<item>';
$data .= '<time>'.$row['timestamp'].'</time>';
$data .= '<date>'.$row['timestamp'].'</date>';
$data .= '<location>'.$row['longitude'].'</location>';
$data .= '<report>'.$row['details'].'</report>';
$data .= '</item>';
}
$data .= '</channel>';
$data .= '</rss> ';
header('Content-Type: application/xml');
echo $data;
?>
没有根标签丢失,一切似乎都井井有条,但显然不是。
最佳答案
As per @fejese's comment, this is likely due to unescaped content in your database. Instead of building up the document using strings by hand, why not use an established library like DomDocument to create the elements in a safe way?
这是一个使用 DOMDocument 的例子构建 RSS Xml Feed,而不是通过字符串连接手动执行此操作。这样,转义数据库中可能存在的无效字符序列的所有繁重工作都由库完成:
$xml = new DOMDocument('1.0', 'utf-8');
$element = $xml->createElement('rss');
$rss = $xml->appendChild($xml->createElement("rss"));
$rss->setAttribute("version","2.0");
$rss->setAttribute("xmlns:atom","http://www.w3.org/2005/Atom");
$channel = $xml->createElement("channel");
foreach ($rs_post as $row) {
$item = $xml->createElement("item");
$item->appendChild($xml->createElement("time", $row['timestamp']));
$item->appendChild($xml->createElement("date", $row['timestamp']));
$item->appendChild($xml->createElement("location", $row['longitude']));
$item->appendChild($xml->createElement("report", $row['details']));
$channel->appendChild($item);
}
$rss->appendChild($channel);
header('Content-Type: application/xml');
echo $xml->saveXML();
关于php - 从 MySQL 表创建 xml rss 提要时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27678642/