ConfirmAccount扩展的作用就是让新用户无法随意注册,而必须依靠申请,同时还需要管理员确认之后才可以启用。而且在申请的表单页面中,你还可以要求用户添加基本简历作为依据。
但在实际使用中,无论你将最小字符调成多少,用户一旦使用中文的话,系统都会提示你长度不够。
统计的代码位于扩展目录\includes\business\AccountRequestSubmission.php中:

if ( $formConfig['Biography']['enabled']
            && str_word_count( $this->bio ) < $formConfig['Biography']['minWords'] ) {
            $minWords = $formConfig['Biography']['minWords'];

其中str_word_count函数只能统计英文单词的数量,这也就是为什么会出现上面的问题。因此我们要做的就是把该函数替换成能够统计中英文混合的。
下面是一个简单的方法,虽然正确率不是太高,但毕竟我们也不是严格要按字数来的。
首先,新建一个名为countMixedWords的函数,代码如下:

function countMixedWords($text) {
    // 尝试将中文字符替换为空格
    $str = preg_replace('/[\x80-\xff]{1,3}/', ' ', $text, -1, $n);

    // 计算剩余的英文单词数
    $englishWordCount = str_word_count($str);

    // 返回英文单词数加上之前替换的中文字符数(这里假设每个中文字符视为一个单词)
    return $englishWordCount + $n;
}

然后将上面第一段代码中str_word_count改成countMixedWords即可。
保存后覆盖原有的代码。效果如下:
ConfirmAccount.jpg

请注意,这种方法仍然存在局限性,因为 \x80-\xff 范围并不能完全覆盖所有Unicode字符,而且这样简单粗暴地替换中文字符为单个单词并不严谨,尤其对于含有标点符号、数字以及其他特殊字符的复杂文本,其结果可能并不准确。对于精确的中英文混合单词计数,仍推荐使用针对多语言优化的分词库。

最后修改:2024 年 03 月 25 日
如果觉得我的文章对你有用,请随意赞赏