导读:本期聚焦于小伙伴创作的《php判断字符串长度时包含html标签吗?如何正确去除标签后计算字符数》,敬请观看详情。用strlen直接获取一段含有div与a结构的文本长度,往往会把标签字符也算进去,导致统计结果偏大。底层原因是strlen按字节计数,不会识别标签语义。若需获取纯文本字符数,应先使用strip_tags剥离标记,再结合mb_strlen按编码统计。常见误区是以为trim能去掉标签,其实它只处理空白。下文给出完整示例与中文字数处理方案,并对比不同函数差异,帮助准确测长。

在PHP开发中,我们经常需要统计用户输入内容或者接口返回文本的长度,比如做字数限制、摘要截取等。当原始字符串里带有HTML标签时,直接用常规函数得到的长度并不是真正可见文字的长度,这会影响业务判断。

php判断字符串长度时包含html标签吗?如何正确去除标签后计算字符数

为什么直接判断字符串长度会包含HTML标签

PHP里的strlen函数用来获取字符串的字节长度,它并不会解析字符串内容,也不会区分哪些是标签、哪些是文字。例如字符串<p>你好</p>,其中的<p></p>都属于普通字符,会被一并计入。

如果页面编码是UTF-8,一个汉字通常占三个字节,而标签的英文字符每个占一个字节。使用strlen得到的是所有字节总和,既包含标签又包含文字编码字节,因此数值会明显大于我们肉眼看到的字数。要想拿到“纯文本字数”,必须先把标签去掉再做统计。

使用strip_tags去除HTML标签

strip_tags是PHP内置函数,作用是剥除字符串中的HTML和PHP标签,只保留标签之间的文本。它的第一个参数是原始字符串,第二个参数可指定允许保留的标签。对于字数统计场景,通常不需要保留任何标签。

需要注意的是,strip_tags只是简单删除尖括号及其中内容,不会处理实体编码如&nbsp;,也不会自动清理多余空白。如果原文标签嵌套不规范,也可能残留少量尖括号字符,因此去标签后最好配合trim清理两端空格。

<?php
$html = '<div>欢迎访问<a href="https://ipipp.com">我们的网站</a><p>今日特惠</p></div>';
$text = strip_tags($html);
$text = trim($text);
echo $text; // 输出:欢迎访问我们的网站今日特惠
?>

去标签后如何正确计算字符数

去除标签得到的纯文本,如果只包含英文,用strlenmb_strlen差异不大;但包含中文时,必须指定编码用mb_strlen按字符计数。否则strlen会把中文按字节算,一个数字“长度”虚高。

下面示例展示对比:同一段中文去标签后,strlen得到字节数,mb_strlen得到真实字数。业务里做字数上限校验,应以mb_strlen为准。

<?php
$html = '<span>文章内容示例</span>';
$text = strip_tags($html);
$byte_len = strlen($text);
$char_len = mb_strlen($text, 'UTF-8');
echo '字节长度:' . $byte_len . "n";
echo '字符长度:' . $char_len . "n";
// 字节长度可能为18,字符长度为6
?>

常见误区与完整封装函数

有些开发者误以为trimhtmlspecialchars能去标签,其实前者只去空白,后者是把标签转义显示而非删除。正确做法永远是strip_tagsmb_strlen组合。

我们可以封装一个工具函数,统一处理去标签与统计,并预留允许保留的标签参数,方便不同业务复用。以下代码演示了带默认参数的安全写法。

<?php
function getPlainTextLength($str, $allowable_tags = '', $encoding = 'UTF-8') {
    $text = strip_tags($str, $allowable_tags);
    $text = trim($text);
    return mb_strlen($text, $encoding);
}

$input = '<p>测试<b>加粗</b>内容</p>';
echo getPlainTextLength($input); // 输出纯中英文字符数
?>

不同场景下的选择建议

如果仅做数据库存储前的大致长度拦截,且内容以英文为主,去标签后用strlen也可接受;但若涉及用户前台展示字数、短信条数计算或中文社区发帖限制,务必使用mb_strlen。对于含富文本编辑器的系统,建议服务端校验与前端提示采用同一套去标签测长逻辑,避免不一致。

另外,当文本来自外部接口且可能包含脚本标签时,strip_tags也能顺带清除<script>降低存储风险,但正式防护还应配合更完善的过滤库。长度统计只是其中一环,不能替代安全处理。

函数是否去标签计数单位适用场景
strlen字节底层字节判断
strip_tags不计数提取纯文本
mb_strlen字符多语言字数统计

php字符串长度strip_tags修改时间:2026-08-12 03:12:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。