You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress模板中strlen获取文章字符数不准确问题及优化尝试

WordPress文章循环中准确统计文章字符数的解决方案

原代码问题分析

你最初使用的代码存在两个核心问题,导致字符数统计偏差:

  • get_the_content()返回的内容包含HTML标签、短代码,这些无关元素会被计入字符数,导致结果偏大;
  • utf8_decode将UTF-8多字节字符转为单字节编码,strlen按字节数统计,会把中文、表情等多字节字符拆成多个字节计算,进一步放大误差。

优化后代码的不足

你尝试的mb_strlen(wp_strip_all_tags($post->post_content))已经解决了多字节统计和HTML标签问题,但$post->post_content是文章原始内容,包含未解析的短代码(比如[video]、[gallery]),这些短代码本身会被算入字符数,但前端显示时短代码会被替换为实际内容,所以统计结果和真实显示的字符数仍有差异。

准确统计的两种方案

方案1:统计前端实际显示的纯文本字符数(推荐)

该方案模拟WordPress输出内容的完整流程,解析短代码后再统计,结果和用户实际看到的纯文本字符数完全一致:

<?php
// 获取经过所有过滤器处理的内容(解析短代码、应用格式)
$display_content = apply_filters('the_content', $post->post_content);
// 清除所有HTML标签,保留纯文本
$clean_text = wp_strip_all_tags($display_content);
// 去除首尾空白,统计UTF-8多字节字符长度
$char_count = mb_strlen(trim($clean_text), 'UTF-8');
echo $char_count;
?>

方案2:统计文章原始纯文本(不含短代码、HTML)

如果不需要统计短代码解析后的内容,仅统计作者输入的纯文本:

<?php
// 先清除短代码,再清除HTML标签
$raw_clean_text = wp_strip_all_tags(strip_shortcodes($post->post_content));
// 统计UTF-8多字节字符长度
$char_count = mb_strlen(trim($raw_clean_text), 'UTF-8');
echo $char_count;
?>

关键函数说明

  • apply_filters('the_content', ...):触发WordPress的内容处理流程,自动解析短代码、应用主题格式,得到和前端显示一致的内容;
  • wp_strip_all_tags:安全移除所有HTML标签,比原生strip_tags更可靠,避免残留标签碎片;
  • strip_shortcodes:直接移除文章中的短代码标签(不解析);
  • mb_strlen(..., 'UTF-8'):正确统计UTF-8编码下的字符数,每个中文、表情等多字节字符都按1个字符计算;
  • trim():去除内容首尾的换行、空格等空白字符,避免无关字符影响统计结果。

内容的提问来源于stack exchange,提问作者herrfischer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:05:12