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

如何用PHP移除<a>标签并保留内容?strip_tags无法使用

没问题!针对你的需求——移除所有标签但保留标签内容,同时保留

标签(毕竟strip_tags会把所有标签一刀切,确实满足不了),这里有两种靠谱的PHP实现方案,你可以根据实际场景选择:

如果你的标签格式和描述的一致(即使属性有变化,比如不同的style、href),正则表达式可以快速解决问题。我们可以匹配任意标签,然后把整个标签替换成它包裹的内容:

$originalHtml = '<p>这是一段包含<a style="color: #000000" href="https://example.com">链接内容</a>的文本,还有另一个<a href="https://test.com">测试链接</a></p>';

// 正则匹配所有<a>标签,替换为标签内的内容
$processedHtml = preg_replace('/<a\b[^>]*>(.*?)<\/a>/is', '$1', $originalHtml);

echo $processedHtml;
// 输出结果:<p>这是一段包含链接内容的文本,还有另一个测试链接</p>

简单解释下正则的逻辑:

  • <a\b:匹配<a开头,确保是完整的标签(避免匹配到类似<abc>的字符串)
  • [^>]*:匹配<a标签内的所有属性内容(比如style、href)
  • (.*?):非贪婪匹配标签内的所有内容(确保不会跨标签匹配)
  • </a>:匹配闭合标签
  • is修饰符:i不区分大小写,s允许跨行匹配(如果链接内容换行也能处理)

如果你的HTML结构比较复杂(比如存在嵌套标签、不规范的标签写法),正则容易出问题,这时候用PHP的DOMDocument来解析HTML结构会更可靠:

$originalHtml = '<p>这是一段包含<a style="color: #000000" href="https://example.com">链接内容</a>的文本,还有另一个<a href="https://test.com">测试链接</a></p>';

// 初始化DOMDocument
$dom = new DOMDocument();
// 处理中文乱码问题,将HTML转为实体编码
$dom->loadHTML(mb_convert_encoding($originalHtml, 'HTML-ENTITIES', 'UTF-8'));
$xpath = new DOMXPath($dom);

// 找到所有<a>标签
$allLinks = $xpath->query('//a');

// 遍历每个<a>标签,替换为内容
foreach ($allLinks as $link) {
    // 获取<a>标签的子节点(即包裹的内容)
    $contentNodes = $link->childNodes;
    // 将内容节点移到<a>标签的父节点中,放在<a>前面
    foreach ($contentNodes as $node) {
        $link->parentNode->insertBefore($node, $link);
    }
    // 删除原来的<a>标签
    $link->parentNode->removeChild($link);
}

// 保存处理后的HTML,同时去掉DOM自动添加的<html>和<body>标签
$processedHtml = mb_substr($dom->saveHTML(), 12, -15);

echo $processedHtml;
// 输出结果:<p>这是一段包含链接内容的文本,还有另一个测试链接</p>

这个方法的优势在于它是真正解析HTML结构,不管标签的属性怎么变化、内容是否复杂,都能准确提取内容并移除标签,同时完美保留

等其他标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:25:57