You need to enable JavaScript to run this app. 如何使用PHP preg_replace移除HTML文档body内的style标签及内部样式
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP preg_replace移除HTML文档body内的style标签及内部样式

问题原因
  • 你没有接收preg_replace的返回值:PHP的preg_replace不会修改传入的原字符串,而是会将处理后的结果作为返回值返回,你直接调用方法不赋值,原变量内容不会发生变化,这是代码不生效的核心原因。
  • 正则缺少必要修饰符:默认情况下正则中的.不会匹配换行符,如果style标签或body内容存在换行,.*?就会提前终止匹配,导致匹配失败。
  • 原style标签匹配规则不够通用:无法匹配带属性的style标签(比如<style type="text/css">),也无法兼容大写的标签写法。
修复方案

方案1:仅提取处理后的body内容

如果你只需要body的文本内容,使用以下代码:

<?php
$html = '<html><head><title>Title</title><style>.button {color: #fff}</style></head><body>qwe rty zxc<style>.button {color: #fff}</style></body></html>';
// 正则加i修饰符兼容标签大小写,加s修饰符让.匹配所有字符包括换行
if (preg_match('|<body>(.*?)</body>|is', $html, $match)) {
    $body = $match[1];
    // 接收preg_replace返回值,正则匹配所有带属性的style标签
    $body = preg_replace('|<style\b[^>]*>(.*?)</style>|is', '', $body);
    echo $body;
}

运行后输出结果为:qwe rty zxc,符合预期。

方案2:保留完整HTML结构,仅移除body内的style标签

如果你需要保留head等其他部分的内容,只清理body内的style标签,使用以下代码:

<?php
$html = '<html><head><title>Title</title><style>.button {color: #fff}</style></head><body>qwe rty zxc<style>.button {color: #fff}</style></body></html>';
$processedHtml = preg_replace_callback('|<body>(.*?)</body>|is', function ($item) {
    $cleanBody = preg_replace('|<style\b[^>]*>(.*?)</style>|is', '', $item[1]);
    return "<body>{$cleanBody}</body>";
}, $html);
echo $processedHtml;

运行后head内的style标签会保留,body内的style标签会被完全移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 10:36:07