中文网站一般会选择两种编码:gbk/gb2312或是utf-8。 gbk编码下每个中文字符所占字节为2,例:

$zhStr = ‘您好,中国!’;
echo strlen($zhStr); // 输出:12

UTF-8编码下每个中文字符占3个字节。

$zhStr = ‘您好,中国!’;
echo strlen($zhStr); // 输出:18

那么如何计算这组中文字符串的长度呢?有人可能会说gbk下获取中文字符串长度除以2,utf-8编码下除以3不就行了吗?但是您要考虑字符串并不老实,99%的情况会以中英混合的情况出现。 
这是WordPress中的一段代码,主要思想就是先用正则将字符串分解为个体单元,然后再计算单元的个数即字符串的长度,代码如下(只能处理utf-8编码下的字符串):

$zhStr = ‘您好,中国!’;
$str = ‘Hello,中国!’;
// 计算中文字符串长度
function utf8_strlen($string = null) {
// 将字符串分解为单元
preg_match_all(“/./us”, $string, $match);
// 返回单元个数
return count($match[0]);
}
echo utf8_strlen($zhStr); // 输出:6
echo utf8_strlen($str); // 输出:9

下面我封装了一个函数准确计算中文字符串的长度:

function count_strlen($string = null)
{
$fileType = mb_detect_encoding($string , array('UTF-8','GBK','LATIN1','BIG5')) ; //判断字符串中文编码的类型 $length = iconv_strlen($string,$fileType);//根据字符编码计算字符串长度 return $length;
} $str = "中文45汶";
$len = count_strlen($str);
echo $len; //输出5

PHP 统计中文字符串的长度的更多相关文章

  1. (实用篇)php中计算中文字符串长度、截取中文字符串的函数代码

    在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启.当然,如果是用的自己的服务 ...

  2. php中计算中文字符串长度、截取中文字符串

    在做PHP开发的时候,由于我国的语言环境问题,所以我们常常需要对中文进行处理.在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数 ...

  3. php截取中文字符串,英文字符串,中英文字符串长度的方法

    今天学习了php函数截取中文字符串,英文字符串,中英文字符串的函数使用方法.对中英文截取方法不理解,此处先做记录. PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节 ...

  4. Java 中正确获取中文字符串长度

    /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * * @param value * 指定的字符串 * * @return 字符串的长度 */ public static int l ...

  5. php 获取中文长度 截取中文字符串

    #获取中文长度mb_strlen($str,$encoding); #截取中文字符串 mb_substr(str,start,length,encoding);

  6. lua 操作中文字符串之截取和长度竖排显示

    前言 在游戏中,我们经常会遇到汉字的多行显示,比如名字竖行显示等.如下图: 为了实现上面的效果,lua实现分行是通过  \n  实现的,所以我们需要取出汉字,然后插入 \n 实现分行效果.还有一种就是 ...

  7. PHP计算中文字符串长度 、截取相应中文字符串

    PHP计算字符串长度     及其   截取相应中文字符串 计算字符长度: $gouWu = '美日汇http://www.hnzyxok.com/'; echo mb_strlen($gouWu,' ...

  8. javascript获取一个字符串的长度(包含中文)

    /* getStrLen(str):获取一个字符串的长度(包含中文) */ function getStrLen(str){ let len = 0, i, c; for (i = 0; i < ...

  9. 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现。

    问题 从键盘输入一个字符串(长度不超过30),统计字符串中非数字的个数,并将统计的结果显示在屏幕上,用EXE格式实现. 源程序 data segment hintinput db "plea ...

随机推荐

  1. studio_ 优化Android Studio 启动、编译和运行速度?

    http://www.admin10000.com/document/6842.html: 作为一名 Android 程序员,选择一个好的 IDE 工具可以使开发变得非常高效,很多程序员喜欢使用 Go ...

  2. jq鼠标点击滚动锚点

    鼠标点击滚动锚点 //滚动锚点 $('.menus-c ul li a').click(function(){ //alert(); $('html, body').animate({ scrollT ...

  3. unset是不能清除保存在本地电脑上的cookie的,用于session就可以(弄了半天原来是这样)

    unset($_COOKIE["historyWord[$wordId]"]); 这样是不行的,unset只是将变量在脚本运行时注销,但是cookie是写在客户端的,下一次还是可以 ...

  4. qt opencv

    pro中加入如下代码. INCLUDEPATH += /usr/local/include \ /usr/local/include/opencv \ /usr/local/include/openc ...

  5. xcode 插件管理工具

    每次xcode 更新后之前安装的插件 都失效了!解决办法: 一.可以通过在原插件项目infoplist新增 新xcode的 DVTPlugInCompatibilityUUID 来使之支持新版xcod ...

  6. vs报算术运算溢出的错误

    是因为查询的数据量太大,把数据量减少点就不会报这个错了. 或者查询速度快点比如加索引也可能解决,待确定.

  7. POJ - 2533 Longest Ordered Subsequence(最长上升子序列)

    d.最长上升子序列 s.注意是严格递增 c.O(nlogn) #include<iostream> #include<stdio.h> using namespace std; ...

  8. hbase1.1.2安装

    环境:hadoop2.6.1,zk3.4.6 1.配置环境变量 sudo vi /etc/profile.d/hbase-env.sh export HBASE_HOME=/usr/local/hba ...

  9. mysql设置定时任务

    –查看时间调度器是否开启 SHOW VARIABLES LIKE 'event_scheduler'; SELECT @@event_scheduler; –开启时间调度器 SET GLOBAL ev ...

  10. (转)WebApi自动生成在线文档WebApiTestClient

    原文链接:http://www.cnblogs.com/landeanfen/p/5210356.html 前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员 ...