php - 从 MySQL 表创建 xml rss 提要时出错

标签 php mysql xml rss

当我从本地主机上的 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/

相关文章:

PHP打印多行数据

javascript - 使用户能够在新窗口中返回上一页

MySQL TRUNCATE 精度差了一个

xml - 在PowerShell中使用msbuild在NuGet中的安装事件上编辑csproj

php $POST 动态变量名安全问题

php - 正则表达式匹配大写或小写的查询字符串

mysql - 如何返回 sum() 行

php - 使用ajax将 session 变量插入数据库

java - 如何在 Jaxb 编写的 XML 中添加 &lt;![CDATA[ 和 ]]>

java - Saxon-HE 集成扩展功能