2013年01月曾答应博客园网站管理员会在博客园发布原创内容,当时还不太懂技术,一直拖到现在编出解决百度字数统计问题的专业文章。

1.1 字节

字节(B)是 Byte 的中文,多用作存储容量单位,亦可作为传输容量单位。 英文维基百科解释

The byte /ˈbaɪt/ is a unit of digital information in computing and telecommunications that most commonly consists of eight bits.
字节(读音: 百特)是计算与通信中一种数字信息单位,1 字节代表 8 比特最常见。

1 字节(Byte) = 1 个英文字符(UTF-8 编码) = 8 比特(bit) = 8 位二进制数字

1.2 百度计算中文长度验证

汉语字符不同于英语字符,有 3 种常见长度,分别是 2, 3, 4 字节。

案例 1

百度搜索结果URL参数解析疑问 - 搜外问答

<?php echo strlen('百度搜索结果URL参数解析疑问 - 搜外问答');?>

中文 16 个字符
非中文 6 字节
PHP strlen() 函数
华文 = (54 - 6) / 16 = 3 字节
改·字数统计函数
华文 = (38 - 6) / 16 = 2 字节

1.3 百度字数统计函数与计算搜索结果标题为同一函数

案例 2

Рослинництво, тваринництвотавет...
百度改·字数统计函数 63 字节
正则表达式 45 字节
PHP strlen + mb_strlen 函数 48.5 字节

截图中上方标题约为下方标题长度一半,都触发截断,只有改·字数统计函数的计算结果与前述标题字节上限结论一致。 其他 2 种字数统计能解释标题长度为何较短,但与触发标题字节上限误差较大。

1.4 速度测试

★★☆☆☆ 2 星 改·字数统计函数采用 for 循环遍历每个字符,速度较慢,适合少量计算。

★★★☆☆ 3 星 正则表达式处理较短单一字符集有优势。

★★★★★ 5 星 PHP strlen + mb_strlen 函数的优点是无论多少字数,速度快捷稳定。

1.5 兼容性测试

案例 3

···(3 个间隔号)
改·字数统计函数 6 字节
正则表达式 4 字节
PHP strlen + mb_strlen 函数 4.5 字节

вуліца(白俄罗斯)
改·字数统计函数 12 字节
正则表达式 8 字节
PHP strlen + mb_strlen 函数 9 字节

★★★★★ 5 星 论文主要用解释百度标题计数,改·字数统计函数兼容性自是最好。

★★★☆☆ 3 星 正则表达式缺陷在于小范围的字符集内有效,超出中英文字符等集合便失效了。

★★★☆☆ 3 星 当然 PHP 自带函数兼容性比正则表达式好不到哪里。

1.6 速度与兼容性最优化方案

最少限制与应用范围考虑,百度搜索结果基本属于中英文符号混杂 64 字节以内标题为主,使用百度的改·字数统计函数最合适。

1.7 字数统计工具结果比较

案例 4
拿乌克兰语网站测试各个字数统计工具算法差异

Рослинництво, тваринництво та ветеринарія, технічне забезпечення :: Аграрний сектор України 动植物与兽医学,技术支持: 乌克兰农村经济
微软 word2010 10 字数
站长工具 66 字符
爱站网 91 字符
正则表达式 123 字节
PHP strlen + mb_strlen 函数 130 字节
搜外 163 字节
排版助手 166 字节
有一个网站 169 字节
百度改·字数统计函数 169 字节

站长工具、爱站网、九九参考计算网、工具猫、xpcha、正则表达式、PHP 函数等字数统计结果与百度计算方式相去较远。
搜外seo综合诊断较为接近百度字数统计结果,缺点是运行耗时长及受限于只能查询指定域名,使用范围不大。
排版助手作为网络编辑常用的工具,很接近百度计算方式,很实用,不过仍有误差。
有一个网站在线字数统计与百度改·字数统计函数计算结果一致,不过在间隔号、回车等符号计算方法与之不同。

1.8 PHP 源码

百度改·字数统计函数

<?php
$str = stripslashes(htmlspecialchars_decode($words, ENT_QUOTES));
function smarty_modifier_wordcount($str,$encoding = 'UTF-8')
{if(strtolower($encoding) == 'gbk') {$encoding = 'gb18030';}if(!is_string($str)||$str === '') return false;$mbLen = iconv_strlen($str, $encoding);$subLen = 0;for ($i = 0; $i < $mbLen; $i++) {$mbChr = iconv_substr($str, $i, 1, $encoding);if (1 == strlen($mbChr)) {$subLen += 1;} else {$subLen += 2;}}return $subLen;
}
echo smarty_modifier_wordcount($str);
?>

正则表达式

<?php
$str = stripslashes(htmlspecialchars_decode($words, ENT_QUOTES));
$number += strlen(preg_replace('/[\x80-\xff]{1,3}/', ' ', $str, -1, $number));
echo $number;
?>

PHP strlen + mb_strlen 函数

<?php
$str = stripslashes(htmlspecialchars_decode($words, ENT_QUOTES));
echo ((strlen($str) + mb_strlen($str, 'UTF8')) / 2);
?>

参考资料

百度改·字数统计函数代码
分类:  SEO
标签:  百度,  seo,  字数统计,  PHP

百度字数统计代码研究相关推荐

  1. 文本框输入还剩多少字数统计代码

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. 文章字数统计(python)

    文章字数统计(python) 思路: 导入文章 把文章转换成列表 用set() 函数去重后,变为一个去重了的list 再生成一个对应的列表为times 列表 用文章列表和去重后的列表做一个判定,出现的 ...

  3. php加入百度商桥代码,在WP网站上使用百度商桥

    百度商桥是一种网页即时沟通工具 最近有不少朋友通过WEB主题公园的百度商桥和我们联系,也对于百度商桥这种即时网页沟通比较感兴趣. 因此这里我们也对这种比较好用的网页即时沟通工具进行一个介绍,大家也可以 ...

  4. VuePress 添加百度统计代码

    获取百度统计代码 百度统计官网 登陆 - 点击 "获取代码" 添加到vuepress中 编辑 @/docs/.vuepress/config.js 对应的 head 部分信息 mo ...

  5. vue加百度统计代码(亲测有效)

    申请百度统计后,会得到一段JS代码,需要插入到每个网页中去,在Vue.js项目首先想到的可能就是,把统计代码插入到index.html入口文件中,这样就全局插入,每个页面就都有了;这样做就涉及到一个问 ...

  6. uniapp增加百度统计代码(h5)

    做了个微信公众号文章互相阅读的h5界面,http://mptask.wintp.top/(只能微信浏览器打开),其中用到了统计代码,记录如下. 1.新建 tj.html 界面 可放置在项目的根目录,文 ...

  7. 【百度编辑器ueditor】工具,如何去掉百度编辑器 ueditor 元素路径、字数统计等...

    去掉如下截图: 在百度编辑器 ueditor 根目录下: ueditor.config.js 文件中 搜索并将参数elementPathEnabled设置成false即可 常用功能开关如下: ,ele ...

  8. 如何在Vue中添加百度统计代码?

    目录 第一步:在百度统计网站中添加自己的网站 第二步:在maim.js下添加百度统计代码 第三步:创建beforeEach方法 第四步:代码安装检查 第一步:在百度统计网站中添加自己的网站 百度统计官 ...

  9. 百度统计代码怎么开通,百度统计代码如何获取?怎么在网站上添加百度统计代码?

    怎么开通百度统计代码呢?百度统计可以很好的帮助站长分析网站流量动态.百度统计代码获取有两种不同方式.一种是第一次开通百度统计代码,另一种是在额外添加网站百度统计代码.下面我就来说下百度统计代码怎么开通 ...

最新文章

  1. Python中读取ZIP文件
  2. chrome jssip
  3. JavaScript 温故知新 00
  4. Gh0st 3.6 存在的BUG及修改方法(收集整理)
  5. svn commit --cl app 时手动输入提交的注释,而不是在 -m 'comments here'这里输入
  6. Spring boot 默认静态资源路径与手动配置访问路径的方法
  7. 网络技巧:WiFi越用越慢,到底是什么原因,看完你就明白了!
  8. 时间转换python_Python 日期与时间转换的方法
  9. linux3.10内核支持mpls,将MPLS编译进linux内核中
  10. Java生成指定范围随机数的方法
  11. html判断ie6,jquery如何判断是否是ie?
  12. Swift之类型转换
  13. HDU 1071 The area
  14. postgresql 用户安全配置
  15. svn 创建 分支 branches
  16. Animate:基础学习
  17. 计算机文本自定义,自定义文本编辑器
  18. TIMER:肿瘤浸润免疫细胞分析的综合网站
  19. vue用post请求下载文件
  20. MapStruct一个代码的装潢师

热门文章

  1. echarts 地图添加纹理贴图
  2. echarts鼠标悬停轴线是虚线,改成实线
  3. 邮政社招笔试题库_历年中国邮政笔试精华试题及参考答案
  4. 2022-2028年全球与中国显微印刷行业深度分析
  5. C# CheckedListBox控件的使用方法
  6. 金石软件设置服务器无响应,金石创娱 · 携手 OneAPM 优化产品性能,提升用户体验 - OneAPM 互联网类客户案例...
  7. 微软Tech Summit 2017,微软携手Unity打造MR之夜
  8. 火狐浏览器设置url编码_关于URL编码
  9. CString中调用GetBuffer后为什么还要调用ReleaseBuffer
  10. 02_Spring Bean 属性 即xml <beans>标签详解