strip_tags()可快速移除HTML/PHP标签但不处理属性、注释、实体及XSS,DOMDocument提取textContent更安全可靠,正则表达式慎用易误删。

移除字符串中的所有 HTML 特性,核心是剥离标签、属性、注释、脚本、样式及实体编码,最终保留可读纯文本。不同场景下方法差异明显,不能只靠简单替换。
用 strip_tags 快速去标签(适合基础场景)
PHP 内置函数 strip_tags() 最直接:它能移除所有 HTML 和 PHP 标签,同时保留标签之间的文本内容。
- 基础用法:
strip_tags($html)—— 移除全部标签 - 保留指定标签:
strip_tags($html, ['<p>', '<br>', '<strong>'])
—— 仅留段落、换行和加粗 - 注意:它不解析嵌套结构,也不处理未闭合标签;
<script>或<!-- comment -->会被删掉,但不会解码等实体
用 DOMDocument 安全提取纯文本(推荐用于用户输入)
当 HTML 结构复杂、含不规范写法或需严格保留文本逻辑时,DOMDocument + textContent 更可靠。它真正解析文档树,自动忽略无效标签、修复嵌套,并正确处理实体与换行。
- 关键配置:加载时加
LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED,避免自动补<html><body> - 提取方式:
$dom->documentElement->textContent—— 比遍历删除子节点更简洁、更健壮 - 示例:
<p>Hello<script>alert(1)</script></p>→ 输出Hello,且脚本内容被自然丢弃
用正则表达式慎用(仅限已知干净结构)
正则如 /]*>/g(JS)或 /]+>/(PHP/Python)能快速清除标签,但有明显局限:
立即学习“前端免费学习笔记(深入)”;
- 会误杀含
<的合法文本,例如"x < y is true"→ 变成"x is true" - 无法识别注释
<!-- ... -->、CDATA、自定义标签或属性中带尖括号的值 - 不处理 HTML 实体(
©还是原样),也不还原换行与空格格式
服务端语言常用方案对比
不同语言有成熟替代方案,比手写正则更安全:
-
Python:用
BeautifulSoup(html, 'html.parser').get_text()或lxml.etree.HTML(html).xpath('string(.)') -
JavaScript(浏览器):创建临时元素
div.innerHTML = html; const text = div.textContent; -
JavaScript(Node.js):用
jsdom或cheerio模拟 DOM 解析 -
Java:推荐
Jsoup.parse(html).text(),支持防 XSS 预处理(如先 unescape 再提取)



















