PHP 使用正则表达式与 strip_tags 清除 HTML 及注释
在处理用户输入或抓取网页数据时,往往需要去除其中混杂的 HTML 标签、JavaScript/CSS 代码以及注释。本文将演示如何使用 PHP 的正则表达式进行精细化清洗,并简要提及内置函数 strip_tags 的用法。
结果与目标
通过编写一组匹配规则,将原始的包含标记的文本字符串,转换为纯净的文本内容。这不仅包括移除 <script> 和 <style> 块,还需处理 HTML 实体编码(如 ")及多余的空白字符。
准备条件
- 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 字符串处理的技巧与资料,请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









