php判断字符串长度包含html标签吗_php去标签测长度法【技巧】

8次阅读

strlen() 计算含html字符串时会将标签所有字符计入长度,如abc返回21;校验可读长度需先用strip_tags()剥离标签,再用mb_strlen(…, ‘UTF-8’)获取正确中文长度。

php判断字符串长度包含html标签吗_php去标签测长度法【技巧】

php strlen() 会把 HTML 标签当普通字符算进去

直接用 strlen() 测含 HTML 的字符串,标签(比如

)每一个字符都计入长度。这意味着 abc 实际返回的是 21,而不是你想要的“可见文字长度” 3。

常见错误现象:表单限制 20 字,用户输入 你好 却被截断或报错——因为 strlen() 算了 13 个字符(含尖括号、斜杠、字母)。

  • 如果你要校验用户可读内容长度(如评论、标题),必须先剥离标签
  • strlen() 快、无依赖,但纯看字节,不理解 HTML 结构
  • 注意:它对 UTF-8 中文也按字节算,strlen("你好") 返回 6(每个中文 3 字节),不是 2 —— 这是另一个坑,和标签无关但常被混淆

strip_tags() 去标签再测长度最常用

strip_tags()php 内置函数,能快速移除字符串中所有 HTML 和 PHP 标签,保留纯文本内容,适合大多数场景。

实操建议:

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

  • 基础用法:strlen(strip_tags($html)) —— 但注意,这仍用 strlen(),对中文不友好
  • 更稳妥的中文长度判断:mb_strlen(strip_tags($html), 'UTF-8'),确保一个汉字算 1 个长度单位
  • 想保留某些标签(如只允许

    )?传第二个参数:strip_tags($html, ['
    ', '

    '])

    php判断字符串长度包含html标签吗_php去标签测长度法【技巧】

    Flowise

    一款开源的低代码/无代码AI应用开发工具

    下载

    (注意写法是数组,且标签需带

  • 它不会解析嵌套或畸形 HTML(如
    ),但日常富文本编辑器输出基本够用

    为什么不用 html_entity_decode() + strip_tags() 组合?

    有些内容里混着 HTML 实体(如  zuojiankuohaophpcn),strip_tags() 对它们无效——它只删标签,不转义实体。所以如果原始字符串是 "Hello  zuojiankuohaophpcnbyoujiankuohaophpcnWorldzuojiankuohaophpcn/byoujiankuohaophpcn",直接 strip_tags() 得到的是 "Hello  zuojiankuohaophpcnbyoujiankuohaophpcnWorldzuojiankuohaophpcn/byoujiankuohaophpcn",长度还是错的。

    这时需要先解码再剥离:

    • 顺序不能错:必须 html_entity_decode($str, ENT_QUOTES | ENT_html5, 'UTF-8')strip_tags()mb_strlen(..., 'UTF-8')
    • ENT_HTML5 比默认的 ENT_COMPAT 更兼容现代 HTML 实体(如 '
    • 注意:解码可能引入 xss 风险,仅在你信任来源或后续还会过滤时使用;若只是测长度,且内容来自用户输入,建议先 strip_tags(),再对结果做实体解码(更安全)

    复杂 HTML(如 script/style/注释)要额外清理

    strip_tags() 不处理

    内容块,也不删 HTML 注释 。如果这些内容出现在输入中,它们的文本仍会被 mb_strlen() 计入。

    例如:Histrip_tags() 后是 alert(1)Hi → 长度为 9,而非期望的 2。

    解决方法有限但明确:

    • 用正则粗筛(简单场景):preg_replace('/]*>.*?/is', '', $html),再配合 strip_tags()
    • 删注释:preg_replace('//', '', $html)
    • 真正健壮的方案应使用 dom 解析(如 DOMDocument),但性能开销大,仅在高安全要求或结构复杂时值得投入

    实际项目中,多数富文本字段已由前端 editor(如 TinyMCE、Quill)做过基础清洗,后端重点防的是绕过前端的恶意提交——所以“strip_tags + 实体解码 + mb_strlen”覆盖了 95% 的真实需求。剩下那 5%,往往卡在 DOM 层级的嵌套逻辑或自定义标签上,得按需补正则或换解析器。

Copyright ©  SEO

 Theme by Puock

text=ZqhQzanResources