PHP 仿 Word 统计文章字数

function comment_count_word($str){
        $str = preg_replace('/[\x80-\xff]{1,3}/', ' ', $str,-1,$n);//匹配中文或中文下的符号
        $str = preg_replace('/[-\_\.!@#\$%\\\^&\*\)\(\+=\{\}\[\]\/",\'<>~\·`\?:;|]/', ' ', $str,-1,$j);//匹配英文下的符号
        $n+=$j;
        $n += str_word_count($str);
        if(preg_match('/\d+/',$str)){
            preg_replace('/\d+/', ' ', $str,-1,$i);
            $n+=$i;
        }
        return $n;
    }

该方法统计的字数大概和word一致,因为word统计字数,相连的英文和数字(半角)会计算成一个字,如all1234就会统计成一个字。由于我没想到这到底是是怎么一个算法,所以我这边就没法搞了。如果有大佬知道这么搞,求讲解!


以下的代码,是新搞出来的,经过测试,和word统计出来的一致,也没有上面的问题了,但是这里有个特殊字符的问题,我这里只是列出了一部分的半角状态下的特殊字符

function comment_count_word($str){
    //$str =characet($str);
    //判断是否存在替换字符
    $is_tihuan_count=substr_count($str,"龘");
    try {
        //先将回车换行符做特殊处理
        $str = preg_replace('/(\r\n+|\s+| +)/',"龘",$str);
        //处理英文字符数字,连续字母、数字、英文符号视为一个单词
        $str = preg_replace('/[a-z_A-Z0-9-\.!@#\$%\\\^&\*\)\(\+=\{\}\[\]\/",\'<>~`\?:;|]/',"m",$str);
        //合并字符m,连续字母、数字、英文符号视为一个单词
        $str = preg_replace('/m+/',"*",$str);
        //去掉回车换行符
        $str = preg_replace('/龘+/',"",$str);
        //返回字数
        return mb_strlen($str)+$is_tihuan_count;
    } catch (Exception $e) {
        return 0;
    }
}

我再来个js版本的,经过测试,和word统计出来的一致

function fnGetCpmisWords(str){
        var sLen = 0;
        try{
            //先将回车换行符做特殊处理
            str = str.replace(/(\r\n+|\s+| +)/g,"龘");
            //处理英文字符数字,连续字母、数字、英文符号视为一个单词
            str = str.replace(/[\x00-\xff]/g,"m");  
            //合并字符m,连续字母、数字、英文符号视为一个单词
            str = str.replace(/m+/g,"*");
            //去掉回车换行符
            str = str.replace(/龘+/g,"");
            //返回字数
            sLen = str.length;
        }catch(e){

        }
        return sLen;
    }
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!