最直接可靠的方法是使用 str_word_count() 函数,它专为处理自然语言中的“单词”设计,能正确识别字母、数字和下划线组合,自动忽略标点、空格和空白符;对中文等 unicode 文本需结合 mb_convert_encoding() 和 preg_match_all('/\p{l}+|\p{n}+/u', $text, $matches) 处理。

PHP 中统计字符串单词数,最直接可靠的方法是使用 str_word_count() 函数,它专为处理自然语言中的“单词”设计,能正确识别字母、数字和下划线组合(即符合 PHP 变量命名规则的词),并自动忽略标点、空格和空白符。
用 str_word_count() 获取单词总数
该函数默认返回单词数量(整数):
$text = "Hello, world! This is a test—123."; $count = str_word_count($text); // 返回 6:Hello, world, This, is, a, test
注意:它把 "test—123" 拆成 "test" 和 "123"(因中间有 Unicode 连字符),但不会把 "can't" 当作一个词(单引号被当作分隔符)。
按需自定义单词边界(支持多字节)
如果字符串含中文、日文等非 ASCII 文本,str_word_count() 默认不支持(它基于 C 库,只处理单字节编码)。此时需手动处理:
本文档主要讲述的是Matlab语言的特点;Matlab具有用法简单、灵活、程式结构性强、延展性好等优点,已经逐渐成为科技计算、视图交互系统和程序中的首选语言工具。特别是它在线性代数、数理统计、自动控制、数字信号处理、动态系统仿真等方面表现突出,已经成为科研工作人员和工程技术人员进行科学研究和生产实践的有利武器。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“PHP免费学习笔记(深入)”;
- 先用 mb_convert_encoding() 统一转为 UTF-8;
- 用正则匹配 Unicode 字母、数字、汉字、平假名、片假名等:
preg_match_all('/\p{L}+/u', $text, $matches); - 取
count($matches[0])即为单词/词素数。
避免常见误区
- 别用 explode(' ', $str):多个空格、制表符、换行会导致空元素,需额外过滤;
- trim() + str_word_count() 不必要:该函数本身跳过首尾空白;
- 英文缩写如 "U.S.A." 会被拆成 "U", "S", "A" —— 若需保留,应先预处理替换标点。
简单健壮的封装函数(兼容中英文)
适用于大多数场景:
function countWords($text, $isUnicode = false) {
if ($isUnicode && function_exists('mb_detect_encoding')) {
$text = mb_convert_encoding($text, 'UTF-8', 'auto');
preg_match_all('/\p{L}+|\p{N}+/u', $text, $matches);
return count($matches[0]);
}
return str_word_count($text);
}
调用:countWords("你好 world 123", true) → 返回 3。










