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

PHP提取<td>中第二个<br>前内容时explode报错求助

解决方法:获取中第二个
之前的内容

首先,你遇到的报错explode() expects parameter 2 to be string是因为$xpath->query()返回的是DOMNodeList对象,不是直接的字符串,explode()没法直接处理这个对象——得先把节点内容转换成字符串,或者用DOM API直接遍历处理。

错误原因拆解

你的代码里$contenuto_paradigma = $xpath->query($query_paradigma);得到的是一个DOM节点列表,哪怕只有一个匹配的<td>,它也是列表类型,不能直接传给explode()。

方案1:先转成HTML字符串再处理

这种方法适合结构简单的HTML,先把<td>的内容转成字符串,再分割截取:

$query_paradigma = '//span[contains(@class, "style11")][1]/parent::td';
$contenuto_paradigma = $xpath->query($query_paradigma);

// 先获取第一个匹配的<td>节点
$tdNode = $contenuto_paradigma->item(0);

if ($tdNode) {
    // 将节点转换为完整的HTML字符串
    $dom = new DOMDocument();
    $clonedTd = $tdNode->cloneNode(true);
    $dom->appendChild($clonedTd);
    $tdHtml = $dom->saveHTML();

    // 用正则分割(兼容<br>、<br/>、<br >等写法),分割成3份
    $parts = preg_split('/<br\s*\/?>/i', $tdHtml, 3);

    // 拼接前两部分(包含第一个<br>,到第二个<br>之前的内容)
    if (count($parts) >= 2) {
        $result = $parts[0] . '<br>' . $parts[1];
        echo $result;
    } else {
        // 如果不足两个<br>,直接输出全部内容
        echo $tdHtml;
    }
} else {
    echo "未找到匹配的<td>节点";
}

方案2:用DOM API遍历节点(更准确)

如果你的HTML结构可能有复杂嵌套,用DOM遍历的方式更可靠,直接找到第二个<br>就停止:

$query_paradigma = '//span[contains(@class, "style11")][1]/parent::td';
$contenuto_paradigma = $xpath->query($query_paradigma);
$tdNode = $contenuto_paradigma->item(0);

if ($tdNode) {
    $resultHtml = '';
    $brCounter = 0;
    $dom = new DOMDocument();

    foreach ($tdNode->childNodes as $child) {
        // 遇到<br>就计数
        if ($child->nodeName === 'br') {
            $brCounter++;
            // 把当前<br>加入结果
            $resultHtml .= $dom->saveHTML($child);
            // 第二个<br>出现后立即停止遍历
            if ($brCounter === 2) {
                break;
            }
        } else {
            // 其他节点直接转成HTML加入结果
            $resultHtml .= $dom->saveHTML($child);
        }
    }

    echo $resultHtml;
} else {
    echo "未找到匹配的<td>节点";
}

两种方案对比

  • 方案1:代码更简洁,适合结构简单的HTML,正则已经兼容<br>的常见写法。
  • 方案2:完全基于DOM节点操作,不会因为HTML字符串的格式变化出错,适合复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:05:43