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

PHP中如何移除字符串内的HTML标签及标签内部的内容?

实现方案

你可以选择以下两种方案处理读取到的字符串,整合到原有读取逻辑中即可:

方案1:正则快速处理(适合结构简单的文本)

适合处理无嵌套标签、标签结构规则的场景,代码简单执行速度快:

// 封装处理函数
function stripTagsWithContent(string $rawStr): string {
    // 匹配所有完整HTML标签(含自闭合标签)及内部内容,直接替换为空
    $reg = '/<[a-z][a-z0-9]*\b[^>]*>.*?<\/[a-z][a-z0-9]*>|<[^>]*\/>/is';
    return preg_replace($reg, '', $rawStr);
}

// 整合到你原有的读取逻辑
while (!feof($handle)) {
    $line = trim(utf8_encode(fgets($handle)));
    // 新增处理步骤
    $processedLine = stripTagsWithContent($line);
    yield $processedLine;
}

测试你给出的示例字符串,可直接得到预期输出Hey my name is . I am a !。


方案2:DOM解析处理(兼容复杂HTML场景)

如果需要处理嵌套标签、标签属性含特殊字符的复杂场景,使用PHP内置DOM扩展处理稳定性更高:

function stripTagsWithContent(string $rawStr): string {
    // 屏蔽DOM解析过程中的非致命警告
    libxml_use_internal_errors(true);
    $dom = new DOMDocument();
    // 增加编码声明避免中文乱码
    $dom->loadHTML('<?xml encoding="UTF-8">' . $rawStr);
    $xpath = new DOMXPath($dom);
    // 选中所有元素节点批量删除
    foreach ($xpath->query('//*') as $node) {
        $node->parentNode->removeChild($node);
    }
    // 提取剩余纯文本内容
    return trim($dom->textContent);
}

该函数可直接替换方案1中的处理函数,调用逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:39:00