strip_tags()是php中过滤html标签最常用的方法,可移除html/php标签并支持白名单保留指定标签,但不解析html语义、不处理属性与xss风险,需配合其他函数或专用库增强安全性。

PHP中过滤HTML标签最常用的方法就是strip_tags()函数,它确实实测可用,但要注意它的行为边界和常见陷阱。
strip_tags()的基本用法
该函数能快速移除字符串中的HTML和PHP标签,只保留纯文本内容。语法简单:
示例:<?php <br> $html = "<p>欢迎<b>使用</b>PHP!</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill4293" title="Doc To HTML"><img src="https://img.php.cn/upload/skill/000/000/081/178998486916110.jpg" alt="Doc To HTML" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill4293" title="Doc To HTML" class="overflowclass">Doc To HTML</a> <p class="overflowclass">使用 MinerU 文档处理引擎将 Word 文档(.doc、.docx)转换为保留结构和格式的干净 HTML。</p> </div> <a rel="nofollow" href="/xiazai/skill4293" title="Doc To HTML" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>";<br> $text = strip_tags($html);<br> echo $text; // 输出:欢迎使用PHP!<br>?>
允许特定标签的写法
默认会删掉所有标签,但可以传入第二个参数指定“白名单”,只保留某些标签:
- 支持单个标签:
strip_tags($html, '<strong>')</strong> - 支持多个标签:
strip_tags($html, '<p><br><strong><em>')</em></strong></p> - 注意:标签名必须小写,且不能带属性(如
<div class="x">中的<code>class会被忽略,但整个<div>仍被保留或删除,取决于是否在白名单中)<h3>容易被忽略的限制</h3> <p>这个函数不是HTML解析器,不处理嵌套、格式错误或自闭合标签的语义:</p> <ul> <li>遇到<code><script>alert(1)</script>会直接删掉,但<img src="x" onerror="alert(1)">中的JS代码不会执行,不过属性本身仍保留在输出里(如果<img>在白名单中) - 对
<!-- 注释 -->、CDATA段、PHP短标签... ?>也一并清除 - 不校验标签是否成对,
<b>文字</b>这种未闭合标签也会被删掉
安全过滤建议
仅靠strip_tags()不足以防范XSS,尤其当需要保留部分富文本时:
- 若需保留格式,优先考虑HTML Purifier等专用库
- 若只是提取纯文本摘要,配合
trim()和htmlspecialchars()二次转义更稳妥 - 用户输入中含URL或邮箱时,可先用
filter_var()验证再处理










