str_word_count()在PHP中与东方语言一起使用?

时间:2014-03-17 19:36:07

标签: php unicode character-encoding

创建一个计算比str_word_count()更多语言的单词的函数的正确方法是什么?具体来说,我需要支持中文,日文和韩文。

我认为会是这样的:

  1. 以某种方式检查是否少于50%的字符是多字节的。如果为true,请使用str_word_count()并返回。
  2. 删除所有连续的字母数字字符,并为每个字符加1(假设这些是西方字)。
  3. 删除所有空格和标点符号。添加字符串长度以计算。
  4. 返回计数。
  5. 有更好的方法吗?我可以想到我头脑中的一些缺陷:重音字符,使用空格分隔单词的多字节语言(例如阿拉伯语,我相信)。

1 个答案:

答案 0 :(得分:3)

What about using ICU?通过intl扩展(类IntlBreakIterator)在PHP中进行接口。

这样的事情:

function utf8_word_count($string, $mode = 0) {
    static $it = NULL;

    if (is_null($it)) {
        $it = IntlBreakIterator::createWordInstance(ini_get('intl.default_locale'));
    }

    $l = 0;
    $it->setText($string);
    $ret = $mode == 0 ? 0 : array();
    if (IntlBreakIterator::DONE != ($u = $it->first())) {
        do {
            if (IntlBreakIterator::WORD_NONE != $it->getRuleStatus()) {
                $mode == 0 ? ++$ret : $ret[] = substr($string, $l, $u - $l);
            }
            $l = $u;
        } while (IntlBreakIterator::DONE != ($u = $it->next()));
    }

    return $ret;
}

(暗示启用了intl扩展,PHP> = 5.5.0)