You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:修复从MySQL拉取数据的RSS/JSON格式PHP脚本

解决PHP输出标准RSS和JSON格式的问题

看起来你在把SQL数据转成标准RSS/JSON格式时遇到了坑,我帮你排查下常见问题,然后给出经过验证的完整脚本,确保输出能被全局识别为标准格式。


一、标准RSS/XML输出脚本修正

原代码常见问题:

  • 字符集使用ISO-8859-1已经过时,现在主流都是UTF-8,容易导致乱码
  • 可能缺少完整的RSS XML结构(比如<rss>根节点、<channel>必需字段)
  • 数据库查询用了废弃的mysql_*函数,存在安全风险且兼容性差
  • 没有对XML特殊字符(比如&、<、>)进行转义,会破坏XML结构

修正后的完整RSS脚本:

<?php
// 设置标准RSS响应头,用UTF-8字符集
header("Content-Type: application/rss+xml; charset=UTF-8");
// 禁止缓存(可选,根据需求调整)
header("Cache-Control: no-cache, must-revalidate");

// 数据库配置(替换成你的真实信息)
$DBHOST = "localhost";
$DBUSER = "your_db_user";
$DBPASS = "your_db_pass";
$DBNAME = "your_db_name";

try {
    // 使用PDO连接数据库(安全且现代的方式)
    $pdo = new PDO("mysql:host=$DBHOST;dbname=$DBNAME;charset=utf8mb4", $DBUSER, $DBPASS);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 查询数据(替换成你的表和字段)
    $stmt = $pdo->query("SELECT id, title, content, pub_date, link FROM your_table ORDER BY pub_date DESC LIMIT 10");
    $items = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 输出标准RSS结构
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    ?>
    <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
        <channel>
            <title>你的RSS标题</title>
            <link>https://your-website.com/</link>
            <description>你的RSS描述</description>
            <language>zh-CN</language> <!-- 替换成你的语言,比如en-us -->
            <pubDate><?php echo date(DATE_RSS); ?></pubDate>
            <atom:link href="https://your-website.com/rss.php" rel="self" type="application/rss+xml" />
            
            <?php foreach ($items as $item): ?>
            <item>
                <title><?php echo htmlspecialchars($item['title'], ENT_XML1, 'UTF-8'); ?></title>
                <link><?php echo htmlspecialchars($item['link'], ENT_XML1, 'UTF-8'); ?></link>
                <description><?php echo htmlspecialchars($item['content'], ENT_XML1, 'UTF-8'); ?></description>
                <pubDate><?php echo date(DATE_RSS, strtotime($item['pub_date'])); ?></pubDate>
                <guid isPermaLink="true"><?php echo htmlspecialchars($item['link'], ENT_XML1, 'UTF-8'); ?></guid>
            </item>
            <?php endforeach; ?>
        </channel>
    </rss>
    <?php
} catch(PDOException $e) {
    // 错误处理(生产环境可以改成记录日志,不要输出错误)
    header("HTTP/1.1 500 Internal Server Error");
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo '<rss version="2.0"><channel><title>Error</title><description>数据库连接失败: ' . htmlspecialchars($e->getMessage(), ENT_XML1) . '</description></channel></rss>';
    exit;
}
?>

二、标准JSON输出脚本修正

原代码常见问题:

  • 没有设置正确的application/json响应头,导致客户端无法识别为JSON
  • 可能直接输出数据库原始数据,没有转成合法的JSON格式(比如特殊字符未转义)
  • 数据库查询存在安全风险,没有使用参数化查询(如果有条件查询的话)

修正后的完整JSON脚本:

<?php
// 设置标准JSON响应头,UTF-8字符集
header("Content-Type: application/json; charset=UTF-8");
// 禁止缓存(可选)
header("Cache-Control: no-cache, must-revalidate");

// 数据库配置(替换成你的真实信息)
$DBHOST = "localhost";
$DBUSER = "your_db_user";
$DBPASS = "your_db_pass";
$DBNAME = "your_db_name";

try {
    // PDO连接数据库
    $pdo = new PDO("mysql:host=$DBHOST;dbname=$DBNAME;charset=utf8mb4", $DBUSER, $DBPASS);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 查询数据(替换成你的表和字段)
    $stmt = $pdo->query("SELECT id, title, content, pub_date, link FROM your_table ORDER BY pub_date DESC LIMIT 10");
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 转换为标准JSON格式,确保转义特殊字符
    echo json_encode([
        'status' => 'success',
        'count' => count($data),
        'items' => $data
    ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); // JSON_PRETTY_PRINT可选,方便阅读

} catch(PDOException $e) {
    // 错误处理
    http_response_code(500);
    echo json_encode([
        'status' => 'error',
        'message' => '数据库连接失败: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
    exit;
}
?>

关键注意事项:

  • 替换所有your_*开头的配置为你真实的数据库信息、表名、字段名
  • RSS的<language>字段要符合标准(比如en-us、zh-CN)
  • JSON脚本中的JSON_UNESCAPED_UNICODE确保中文不会被转义成Unicode编码,更易读
  • 生产环境不要输出数据库错误信息,改成写入日志文件

内容的提问来源于stack exchange,提问作者vasilis smyrnios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:28:46