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

移除字符串中的所有 HTML 特性,核心是剥离标签、属性、注释、脚本、样式及实体编码,最终保留可读纯文本。不同场景下方法差异明显,不能只靠简单替换。
用 strip_tags 快速去标签(适合基础场景)
PHP 内置函数 strip_tags() 最直接:它能移除所有 HTML 和 PHP 标签,同时保留标签之间的文本内容。
- 基础用法:
strip_tags($html)—— 移除全部标签 - 保留指定标签:
strip_tags($html, ['<p>', '<br>', '<strong>'])</strong></p>
—— 仅留段落、换行和加粗 - 注意:它不解析嵌套结构,也不处理未闭合标签;
<script></script>或<!-- comment -->会被删掉,但不会解码等实体
用 DOMDocument 安全提取纯文本(推荐用于用户输入)
当 HTML 结构复杂、含不规范写法或需严格保留文本逻辑时,DOMDocument + textContent 更可靠。它真正解析文档树,自动忽略无效标签、修复嵌套,并正确处理实体与换行。
- 关键配置:加载时加
LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED,避免自动补 - 提取方式:
$dom->documentElement->textContent—— 比遍历删除子节点更简洁、更健壮 - 示例:
<p>Hello<script>alert(1)</script></p>→ 输出Hello,且脚本内容被自然丢弃
用正则表达式慎用(仅限已知干净结构)
正则如 /]*>/g(JS)或 /]+>/(PHP/Python)能快速清除标签,但有明显局限:
- 会误杀含
的合法文本,例如 <code>"x → 变成 <code>"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 再提取)
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











