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

如何使用PHP替换页面中包含locked-content类的嵌套div整体代码

实现方案

推荐使用PHP内置的DOM扩展实现该需求,无需手动处理嵌套标签计数、多节点匹配等逻辑,可靠性远高于正则匹配方案。

实现步骤

  • 加载从ob_buffer获取的HTML代码,处理编码兼容问题
  • 使用XPath查询所有携带locked-content类的div节点
  • 遍历匹配节点,批量替换为目标代码
  • 输出处理完成的HTML内容

完整可运行示例代码

<?php
// 你从ob_buffer拿到的原始HTML
$originalHtml = <<<HTML
<div class='class'> cool content </div>
<div class='class more-class life-is-hard locked-content'>
    <div class='cool-div'></div>
    <div class='anoter-cool-div'></div>
    some more code here
</div>
<div class='class'> cool content </div>
HTML;

// 要替换成的目标代码
$replaceHtml = "<div class='replaced-content'>这里是替换后的内容</div>";

// 初始化DOMDocument,抑制不规范HTML的警告
$dom = new DOMDocument();
libxml_use_internal_errors(true);
// 处理UTF-8编码兼容
$dom->loadHTML('<?xml encoding="UTF-8">' . $originalHtml);
libxml_clear_errors();

// 初始化XPath
$xpath = new DOMXPath($dom);
// 匹配所有带locked-content类的div,写法避免部分类名匹配的问题
$targetNodes = $xpath->query("//div[contains(concat(' ', normalize-space(@class), ' '), ' locked-content ')]");

// 遍历替换节点
foreach ($targetNodes as $node) {
    // 创建DOM片段加载替换用的HTML
    $replaceFragment = $dom->createDocumentFragment();
    $replaceFragment->appendXML($replaceHtml);
    // 替换原节点
    $node->parentNode->replaceChild($replaceFragment, $node);
}

// 输出处理后的HTML,去掉自动添加的html/body包装
$processedHtml = '';
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $child) {
    $processedHtml .= $dom->saveHTML($child);
}

echo $processedHtml;

注意事项

  • 如果原始HTML存在严重的语法错误,可先通过简单的字符串预处理修正后再传入DOMDocument解析
  • 不推荐使用正则实现该需求:HTML嵌套结构灵活,正则无法稳定匹配任意层级的嵌套div,极易出现匹配范围错误的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:57:00