php怎么删除html标签_php怎么去除html代码【去除】

3次阅读

strip_tags()仅提取纯文本并删除所有html标签及属性,不保留换行空格,白名单只控制保留标签类型,不防xss,实体编码需先解码再处理,复杂场景应换用htmlpurifier等专用库。

php怎么删除html标签_php怎么去除html代码【去除】

strip_tags() 去掉 HTML 标签最常用,但默认会连换行和空格一起吃掉

它不是“删除标签”而是“提取纯文本”,所以 <p>hello</p> <div>world</div> 会变成 helloworld(中间没空格)。如果你需要保留段落间的可读性,得手动补空格或换行。

  • 只留文本内容、丢弃所有标签和属性,这是它的设计目标
  • 第二个参数可以放白名单,比如 strip_tags($html, ['br', 'p', 'strong']),但注意:白名单只控制“哪些标签保留”,不控制“标签里的属性是否保留”——属性一律被删
  • 对含 js 或 CSS 的 HTML 不安全,strip_tags() 不解析上下文,<script>alert(1)</script> 会被干掉,但 <img src="x" onerror="alert(1)" alt="php怎么删除html标签_php怎么去除html代码【去除】" >onerror 属性照样被删,只是没执行而已——它不防 XSS,别当净化函数用

想保留换行/缩进?得自己处理 strip_tags() 吐出来的“黏糊文本”

原始 HTML 里 <p>第一段</p> <p>第二段</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/ai/2421" title="摄图AI"><img src="https://img.php.cn/upload/ai_manual/001/246/273/176473196985484.png" alt="摄图AI" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a href="/ai/2421" title="摄图AI">摄图AI</a> <p>摄图网旗下AI视觉创作平台</p> </div> <a href="/ai/2421" title="摄图AI" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>strip_tags() 后是 第一段第二段,人眼看不出分隔。这时候不能靠正则硬塞 n,因为标签嵌套和空格位置不可控。

  • 简单场景:在调用后加 preg_replace('/s+/', ' ', $text) 把多余空白压成单空格,再 trim()
  • 稍讲究点:先用 str_replace(['<br>', '<br>', '<br>'], "n", $html) 把换行标签转成真实换行,再 strip_tags(),最后 preg_replace('/ns*n/', "nn", $text) 合并空行
  • 别用 nl2br() 反向操作——那是给 HTML 用的,你已经没有标签了

htmlspecialchars_decode()strip_tags() 完全不是一回事

有人看到页面显示 <p>test</p> 就以为是 HTML 标签没去掉,其实是 HTML 实体编码问题。这是两层事:< 是字符数据,不是标签语法。

立即学习PHP免费学习笔记(深入)”;

  • strip_tags()<p> 完全无效,因为它根本不是标签,只是几个字符
  • 得先 htmlspecialchars_decode($html, ENT_NOQUOTES) 把实体转回来,再 strip_tags()
  • 顺序错了会出问题:如果先 strip_tags()htmlspecialchars_decode()<script> 变成 <script></script>,等于自己造了个可执行标签

复杂 HTML 或要防 XSS?别硬刚,换专用库

strip_tags() 是轻量工具,不是解析器。遇到 <div onclick="alert(1)">xxx</div> 或自闭合 SVG 标签,它照删不误,但不会告诉你属性里有没有危险逻辑。

  • 真要过滤用户输入 HTML,用 HTMLPurifier(PHP)或 domDocument + 白名单遍历——前者重但可靠,后者要自己写逻辑防内存泄漏和 DTD 加载失败
  • DOMDocument::loadHTML() 解析后再取 $dom->textContent 看似更“标准”,但它会自动修复破损 HTML,可能引入意外空格或结构变化,且对含 xml 声明的文档容易报错
  • 性能上,strip_tags() 比 DOM 方案快 5–10 倍,简单清洗就别杀鸡用牛刀

该处理的边界其实很窄:标签要不要留、实体要不要解、空格怎么算“合理”、安不安全——选哪个函数,取决于你手上的 HTML 从哪来、要喂给谁看。

text=ZqhQzanResources