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

PHP中使用DOMDocument类的函数报错,请求排查原因

问题分析与修复方案

咱们来一步步拆解你遇到的两个问题:

1. 警告:DOMDocument::loadHTML(): Empty string supplied as input

从报错堆栈能看到,你在index.php第12行调用getTitleAndLinks(false)时,传入的参数是false,而不是有效的HTML字符串。DOMDocument::loadHTML()需要非空的HTML内容,传入空值或者false就会触发这个警告——相当于你给解析器递了个空文件,它当然会抱怨啦。

2. 致命错误:Uncaught Error: Call to a member function getElementsByTagName() on null

这个错误的直接原因是$doc->getElementById("content")没有找到ID为content的元素,返回了null,之后你尝试在null上调用getElementsByTagName(),这就像对着空气喊“给我拿东西”,肯定会出错。而导致找不到元素的根源,还是因为第一个问题里的空输入——DOM文档是空的,自然找不到任何元素;当然也有可能是你传入的HTML本身就没有id="content"的元素。

具体修复步骤

我给你调整一下代码,加上输入校验和空值判断,就能彻底解决这些问题:

第一步:给函数加上输入校验和空元素判断

function getTitleAndLinks($content) { 
    // 先检查输入是否有效:不能是空值,必须是字符串
    if (empty($content) || !is_string($content)) {
        return []; // 直接返回空数组,或者根据业务需求抛出异常
    }

    $doc = new \DOMDocument(); 
    // 加上@符号抑制HTML解析时的警告(可选,因为很多网页的HTML不规范,会输出一堆警告)
    @$doc->loadHTML($content); 
    $links = []; 

    // 先确认找到content容器,再继续遍历链接
    $container = $doc->getElementById("content"); 
    if ($container) {
        $arr = $container->getElementsByTagName("a"); 
        foreach($arr as $item) { 
            $href = $item->getAttribute("href"); 
            $title = $item->getAttribute("title"); 
            if($item->hasAttribute('rel') && $item->getAttribute('rel') == 'bookmark') { 
                $links[] = [ 'href' => $href, 'title' => $title ]; 
            } 
        } 
    }

    return $links; 
}

第二步:修复调用函数时的传入值

在index.php第12行,你传入的是false,得确保这里传入的是正确获取到的HTML内容。比如如果是用file_get_contents()获取网页内容,要先检查是否成功:

// 示例:获取HTML内容
$htmlContent = file_get_contents('目标网页URL或本地文件路径');
// 检查是否获取成功
if ($htmlContent === false) {
    // 处理获取失败的情况,比如输出提示
    $links = [];
} else {
    $links = getTitleAndLinks($htmlContent);
}

这样修改后,既避免了空输入导致的警告,也防止了在null对象上调用方法的致命错误,代码的健壮性会提升很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:28:02