一、前言

个人认为,PHP是世界上最好的语言。 

二、介绍

查看yii2底层源码, 发现 mb_strlen($str, '8bit') , 此函数的不是PHP的核心函数, 所以需要开启对应的扩展. 函数第一个参数是string类型, 第二个参数是个编码字符集, 比如: utf-8, gbk, unicode 等. '8bit' 是属于什么字符集?  其实8bit是php独有解析的, 8bit并不是一个字符集, 只是php引擎可以解析它而已. 顾名思义, 一个字节等于八个位, 1byte=8bit.

下面是几个例子:

例一:

echo strlen('测试');
//结果是 6
echo mb_strlen('测试');
//结果是 2

从结果来看, strlen里的多字节字符串一个汉字等于3个字节,而mb_strlen中的一个汉字是1个字节.  从而可以看出mb_strlen的默认编码字符集是utf-8

例二:

 echo strlen('测试');

 //结果是 6

 echo mb_strlen('测试');

 //结果是 2

 echo mb_strlen('测试', '8bit');

 //结果是  6

从结果来看例子二, mb_strlen('测试', '8bit') == strlen('测试'), 可是为啥要用mb_strlen() 而不是用 strlen() 呢?

查询资料发现, mb_strlen 比 strlen处理多字节字符串的性能更好, 也更加精确. 其次就是返回值的不同了, mb_strlen 返回值是混合类型fix, 就是说有int也有boolean, 而strlen的返回值只是int类型.

PHP 多字节处理函数 mb_strlen的更多相关文章

  1. PHP 多字节字符串 函数

    参考资料 多字节字符编码方案和他们相关的问题相当复杂,超越了本文档的范围. 关于这些话题的更多信息请参考以下 URL 和其他资源. Unicode materials » http://www.uni ...

  2. PHP中英文字符串截取函数无乱码(mb_substr)和获取中英文字符串字数函数(mb_strlen)

    mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $length,要截取的字数 $encod ...

  3. [51单片机] EEPROM 24c02 [读取存储多字节]

    先将数据存进去,然后再读出来显示在数码管上. 除了代码里定义的连线外还要把p0连接到8位数码管的8针上. /*--------------------------------------------- ...

  4. C/C++常用头文件及函数汇总

    转自: C/C++常用头文件及函数汇总 C/C++头文件一览 C #include <assert.h> //设定插入点#include <ctype.h> //字符处理#in ...

  5. php课程 6-24 字符串函数有哪些(复习)

    php课程 6-24 字符串函数有哪些(复习) 一.总结 一句话总结: 二.php课程 6-24 字符串函数有哪些(复习) 上次复习:--------------------------------- ...

  6. php课程 6-22 字符串格式化函数有哪些(精问)

    php课程 6-22 字符串格式化函数有哪些(精问) 一.总结 一句话总结: 1.猜测一下$_GET()怎么来的? 函数赋值给变量的操作:$_YZM=get();   这样就可以很好的解释哪些全局变量 ...

  7. MFC unicode字符集与多字节字符集 问题之彻底终结!

    Unicode 和多字节字符集 (MBCS) 支持 Visual Studio .NET 2003   有些国际市场以大字符集来使用日文和中文等语言.为了支持这些市场的编程,Microsoft 基础类 ...

  8. PHP最佳实践(译)

    原文: PHP Best Practices-A short, practical guide for common and confusing PHP tasks 译者:youngsterxyf 最 ...

  9. PHP文本处理之中文汉字字符串转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen - 获取字符串的长度 mb_sub ...

随机推荐

  1. Linux访问https报错

    今天用Linux(CentOS)拉Git仓库时,报了个错unable to access 'https://github.com/Wind4/vlmcsd.git/': SSL connect err ...

  2. js删除数组里指定的元素

    js删除数组里指定的元素 首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) { ...

  3. linux 查看防火墙状态

    1.查看防火墙状态 systemctl status firewalld firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running) 2 ...

  4. Homebrew 安装及更新软件

    brew brew install 安装 brew uninstall 卸载 brew update 更新 homebrew brew upgrade 安装已更新软件 brew cleanup 清理 ...

  5. Github站点搭建 gh-pages

    首先:把完整代码放在 gh-pages 分支上,设置 gh-pages 为默认分支(习惯性设置,也可以不设置). 网址: http://你的github域名.github.io/项目入口文件夹/ 本宝 ...

  6. iOS - 通过view查找所在(viewController)

    - (UIViewController *)findViewController:(UIView *)sourceView { id target=sourceView; while (target) ...

  7. [Maven]Eclipse集成遇到的问题

    当maven项目导入到eclipse中后使用eclipse提供的maven命令执行任意一个出现 Exception in thread "main" java.lang.Unsup ...

  8. $("#Upfile").MultiFile();

    Jquery的multifile 1.多文件上传: 2.如上几个验证不重复,和限制上传数量的验证显示的是英文,改成中文文本时,如果不用国标解码,到时候提示框会出现乱码现象.所以一般需要中文显示的时候, ...

  9. simotion ST编程,变量和程序的模块化

    通过这几年的实践,对simotion的程序结构规划有了一些新的理解.工程师在面对项目时,经常有几个问题比较困惑. 目前面对的问题 1)如何理解其他人编写的程序 2)如何从程序中找到可以移植的部分 传统 ...

  10. Vue--父组件传数据给子组件,子组件生命周期过程拿到数据的情况

    需求: 在子组件渲染之前,我要修改数据的某个字段 结果是 组件在beforeUpdate,updated 的状态才能拿到父组件的数据 那么证明,我根本无法在beforeUpdate,updated两个 ...