PHP将HTML转换为纯文本的高效正则方案
本文将介绍如何利用 PHP 的正则替换功能,去除 HTML 文档中的标签、脚本及特殊符号,并将其中的通用实体转为对应的文本字符,从而获得干净的纯文本内容。
实现目标与核心逻辑
在处理网页爬虫或数据清洗任务时,经常需要将结构化的 HTML 文档转换为便于阅读和分析的纯文本。上述代码主要解决三个问题:
- 清理多余内容:移除
<script>及其内部代码,以及所有非必要的 HTML 标签。 - 规范格式:消除多余的空白字符和换行符,保持文本连贯性。
- 还原实体:将
&、<等通用 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转换技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









