我需要有以下 unicode 字符串的字数。使用str_word_count
:
$input = 'Hello, chào buổi sáng';
$count = str_word_count($input);
echo $count;
结果是
7
这显然是错误的。
如何得到想要的结果(4)?
我需要有以下 unicode 字符串的字数。使用str_word_count
:
$input = 'Hello, chào buổi sáng';
$count = str_word_count($input);
echo $count;
结果是
7
这显然是错误的。
如何得到想要的结果(4)?
$tags = 'Hello, chào buổi sáng';
$word = explode(' ', $tags);
echo count($word);
这是一个演示:http ://codepad.org/667Cr1pQ
这是一个快速而肮脏的基于正则表达式(使用 Unicode)的字数计数功能:
function mb_count_words($string) {
preg_match_all('/[\pL\pN\pPd]+/u', $string, $matches);
return count($matches[0]);
}
“单词”是包含以下一项或多项的任何内容:
这意味着以下内容包含 5 个“单词”(4 个正常,1 个连字符):
echo mb_count_words('Hello, chào buổi sáng, chào-sáng');
现在,这个功能不太适合非常大的文本;尽管它应该能够处理互联网上的大部分文本块。这是因为preg_match_all
需要构建和填充一个大数组,一旦计数就将其丢弃(效率非常低)。一种更有效的计数方法是逐个字符地遍历文本,识别 unicode 空白序列,并增加一个辅助变量。这不会那么困难,但它很乏味并且需要时间。
您可以使用此函数计算给定字符串中的 unicode 单词:
function count_unicode_words( $unicode_string ){
// First remove all the punctuation marks & digits
$unicode_string = preg_replace('/[[:punct:][:digit:]]/', '', $unicode_string);
// Now replace all the whitespaces (tabs, new lines, multiple spaces) by single space
$unicode_string = preg_replace('/[[:space:]]/', ' ', $unicode_string);
// The words are now separated by single spaces and can be splitted to an array
// I have included \n\r\t here as well, but only space will also suffice
$words_array = preg_split( "/[\n\r\t ]+/", $unicode_string, 0, PREG_SPLIT_NO_EMPTY );
// Now we can get the word count by counting array elments
return count($words_array);
}
所有学分归作者所有。
我正在使用此代码来计算字数。你可以试试这个
$s = 'Hello, chào buổi sáng';
$s1 = array_map('trim', explode(' ', $s));
$s2 = array_filter($s1, function($value) { return $value !== ''; });
echo count($s2);