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

网站部署至服务器后文章无内容输出,本地正常(DomDocument相关)

问题诊断与解决方案

核心原因

服务器环境下DOMDocument::loadHTML()解析失败导致脚本静默终止,主要源于两点:

  1. 编码兼容性问题:服务器端PHP的DOMDocument默认对UTF-8字符处理不佳,当文章内容包含中文或特殊字符时,解析触发错误但未显示。
  2. 错误抑制机制差异:本地环境可能开启了错误显示或自动忽略libxml错误,而服务器环境未处理解析错误,导致脚本直接中断,无任何输出。

修复步骤

1. 临时开启错误显示(排查阶段)

在PHP代码最顶部添加以下代码,强制显示服务器上的错误信息,确认问题根源:

error_reporting(E_ALL);
ini_set('display_errors', 1);

2. 修复DOMDocument解析逻辑

将原代码中DomDocument初始化的部分替换为以下代码,处理编码并抑制解析错误:

// 替换原有的$domDocument=new DOMDocument();及后续loadHTML行
$domDocument = new DOMDocument();
// 启用libxml内部错误处理,避免解析失败中断脚本
libxml_use_internal_errors(true);
// 添加UTF-8元标签,确保解析时识别正确编码
$domDocument->loadHTML('<!DOCTYPE html><meta charset="UTF-8">' . $nextLine);
// 清除解析产生的错误(避免内存占用)
libxml_clear_errors();

3. 修正内容重复的逻辑错误

原代码循环末尾的$content.=$nextLine."<br>";会导致内容重复输出,需删除该行:

foreach ($brSplit as $nextLine)
{
    // ... 原有的DomDocument解析代码 ...

    if(!$hasHeading){
        $content.=$nextLine."<br>";
    }
    // 移除下面这行重复代码
    // $content.=$nextLine."<br>";
}

4. 修正Session变量的规范写法

原代码中$_SESSION[id]未加引号,PHP严格模式下会触发警告,统一修改为$_SESSION['id'],例如:

// 原代码
if(isset($_SESSION[id]))
// 修改为
if(isset($_SESSION['id']))

补充说明

本地环境正常是因为:

  • 本地PHP配置可能默认开启了libxml错误抑制
  • 本地编码设置与服务器存在差异,未触发解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:28:08