PHP将HTML转换为纯文本的高效正则方案

闻溪
闻溪
发布时间:2026-10-15 | 2人浏览过
原创

本文将介绍如何利用 PHP 的正则替换功能,去除 HTML 文档中的标签、脚本及特殊符号,并将其中的通用实体转为对应的文本字符,从而获得干净的纯文本内容。

实现目标与核心逻辑

在处理网页爬虫或数据清洗任务时,经常需要将结构化的 HTML 文档转换为便于阅读和分析的纯文本。上述代码主要解决三个问题:

  1. 清理多余内容:移除 <script> 及其内部代码,以及所有非必要的 HTML 标签。
  2. 规范格式:消除多余的空白字符和换行符,保持文本连贯性。
  3. 还原实体:将 &amp;、&lt; 等通用 HTML 实体转换回可读的特殊字符(如引号、尖括号等)。

具体操作步骤

第1步:定义搜索与替换数组

使用关联数组分别定义需要匹配的模式($search)和替换后的结果($replace)。这能确保处理顺序和对应关系清晰可控。

<?php
// $document 应包含一个 HTML 文档。
// 本例将去掉 HTML 标记,javascript 代码
// 和空白字符。还会将一些通用的
// HTML 实体转换成相应的文本。

$search = array (
    "'<script[^>]*?>.*?</script>'si", // 去掉 javascript
    "'<[\/\!]*?[^<>]*?>'si",      // 去掉 HTML 标记
    "'([\r\n])[\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 代码运行
);

$replace = array (
    "",
    "",
    "\\1",
    "\"",
    "&",
    "<",
    ">",
    " ",
    chr(161),
    chr(162),
    chr(163),
    chr(169),
    "chr(\\1)"
);
?>
  • 关键参数说明:
    - 前三个模式使用了 s 修饰符以支持点号匹配换行符,i 表示不区分大小写。
    - 最后一个模式使用了 e 修饰符,允许 $replace 中的 chr(\1) 被当作 PHP 代码执行,从而实现动态转换任意数字实体。

第2步:执行正则替换并获取结果

调用 preg_replace() 函数,传入上一步定义的数组,对原始 HTML 字符串进行处理。

$text = preg_replace ($search, $replace, $document);
?>

此时 $text 变量即为去除了脚本、标签和特殊格式后的纯文本。该方法在处理简单到中等复杂度的 HTML 片段时效率较高且易于维护。

注意事项

虽然该正则方案简洁有效,但面对极度复杂嵌套的 HTML 结构或含有大量自定义标签的场景,建议使用专门的 HTML 解析器(如 DOMDocument 或第三方库)以获得更稳定的解析结果。此外,正则 e 修饰符在部分新版 PHP 环境中已被废弃或需配置严格环境,使用时请注意兼容性。

以上就是将HTML转换成文本的详细内容,更多关于PHP转换技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表