PHP 使用正则表达式与 strip_tags 清除 HTML 及注释

Oliver
Oliver
发布时间:2026-10-14| 4人浏览过
原创

在处理用户输入或抓取网页数据时,往往需要去除其中混杂的 HTML 标签、JavaScript/CSS 代码以及注释。本文将演示如何使用 PHP 的正则表达式进行精细化清洗,并简要提及内置函数 strip_tags 的用法。

结果与目标

通过编写一组匹配规则,将原始的包含标记的文本字符串,转换为纯净的文本内容。这不仅包括移除 <script> 和 <style> 块,还需处理 HTML 实体编码(如 &quot;)及多余的空白字符。

准备条件

  • PHP 运行环境
  • 待处理的字符串变量,通常命名为 $document 或 $content

真实操作顺序

第1步:定义正则匹配规则数组

目的:构建一个能够识别各类干扰内容的模式列表。以下数组包含了常见的清洗需求:

$search = array (
    "'<script[^>]*?>.*?</script>'si",     // 去掉 javascript
    "'<style[^>]*?>.*?</style>'si",      // 去掉 css
    "'<[/!]*?[^<>]*?>'si",           // 去掉 HTML 标记
    "'<!--[/!]*?[^<>]*?>'si",          // 去掉 注释 标记
    "'([rn])[s]+'",                      // 去掉空白字符
    "'&(quot|#34);'i",                 // 替换 HTML 实体
    "'&(amp|#38);'i",
    "'&(lt|#60);'i",
    "'&(gt|#62);'i",
    "'&(nbsp|#160);'i",
    "'&(iexcl|#161);'i",
    "'&(cent|#162);'i",
    "'&(pound|#163);'i",
    "'&(copy|#169);'i",
    "'&#(d+);'e"                        // 作为 PHP 代码运行,用于转换其他数字实体
);

注意:最后一项 'e' 修饰符允许执行代码,这在较新版本的 PHP 中可能不推荐使用,但在传统清洗场景中仍可见到。它允许将匹配到的数字实体转换为对应的 ASCII 字符。

第2步:定义替换目标数组

目的:指定每个匹配项应被替换的内容。对于标签和脚本,通常替换为空字符串;对于实体字符,替换为其实际符号。

$replace = array (
    "",                          // 移除 JS
    "",                          // 移除 CSS
    "",                          // 移除 HTML 标记
    "",                          // 移除注释
    "\1",                         // 保留换行符 \n 或 \r
    "\"",                         // "
    "&",                         // &
    "<",                         // <
    ">",                         // >
    " ",                           //  
    chr(161),                   // ¡
    chr(162),                   // ¢
    chr(163),                   // £
    chr(169),                   // ©
    "chr(\1)"                     // 动态转换数字实体
);

第3步:执行正则替换

目的:应用上述规则处理源文本。如果数据来源为文件,可先用 file_get_contents 读取。

// $document 为需要处理的字符串
//$document = file_get_contents($filename);
$out = preg_replace($search, $replace, $document);

// 输出清洗后的结果
echo $out;

完成判断

检查输出变量 $out,确认其中的 HTML 标签、Script/Style 块已消失,且特殊字符已正确还原。若需完全移除所有 HTML 标签而不关心实体解码,可使用更简单的方案。

简要总结

以上展示了利用 PHP 正则表达式灵活清洗网页代码的详细流程。该方法能精细控制哪些部分被移除、哪些实体被保留。更多关于 PHP 字符串处理的技巧与资料,请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。