目录

为什么会有多字节

虽然许多语言每个必要字符都能一对一映射到 8 比特(bit)的值,但也有好几种语言需要非常多的字符来书面通讯,以至于它们的编码范围不能仅仅包含在一个字节里(一个字节 Byte 由 8 比特 bit 构成。每一比特仅能包含两种不同的值: 1 或 0。所以,一字节仅能够表示 256 种不同的值,即 2 的八次方)。开发多字节字符编码方案是为了在基于字节的常规编码系统中表达超过 256 个字符。 比如说汉字编码,由于汉字较多,一个字节无法完全表达,所以出现了由2个或3个字节表示的汉字字符。

在操作(trim、split、splice 等等)多字节编码的字符串的时候,由于在这种编码方案下,两个或多个连续字节可能只表达了一个字符,所以我们需要使用专门的函数。否则,当我们不能将检测多字节字符串的函数应用到这个字符串的时候,它可能无法检测多字节字符的起始位置,并以乱码字符串结尾,基本丢失了它原来的意思。

mbstring 提供了针对多字节字符串的函数,能够帮你处理 PHP 中的多字节编码。除此以外,mbstring 还能在可能的字符编码之间相互进行编码转换。为了方便起见,mbstring 设计成了处理基于 Unicode 的编码,类似 UTF-8、UCS-2 及诸多单字节的编码。

多字节相关函数

mb_多字节函数大多与普通字符串函数功能是相似的,除了多字节。

  • mb_ord — Get code point of character

  • mb_chr — Get a specific character

    这两个函数在php7.2以后的版本生效。

    echo mb_ord("中");//20013
    echo mb_chr(20018);//串
    
  • mb_convert_case — 对字符串进行大小写转换

    mode转换的模式。它可以是 MB_CASE_UPPER、 MB_CASE_LOWER 和 MB_CASE_TITLE 的其中一个。MB_CASE_TITLE是首字母大写的形式。

    print_r(mb_convert_case($str,MB_CASE_TITLE));//i Am A Chinese.
    
  • mb_strtolower — 使字符串小写

  • mb_strtoupper — 使字符串大写

  • mb_split — 使用正则表达式分割多字节字符串

  • mb_str_split — Given a multibyte string, return an array of its characters

    > php7.4

    相对于mb_split支持encoding参数

  • mb_strcut — 获取字符的一部分

    mb_strcut() 和 mb_substr() 类似,都是从字符串中提取子字符串,但是按字节数来执行,而不是字符个数。如果截断位置位于多字节字符两个字节的中间,将于该字符的第一个字节开始执行。这也是和 substr() 函数的不同之处,后者简单地将字符串在字节之间截断,这将导致一个畸形的字节序列。

    $str = "我是一名中国人。i am a chinese.";
    //echo mb_ord("中");
    
    echo mb_strcut($str, 0,6);
    
    echo "<br />";
    
    echo mb_substr($str, 0,6);
    echo "<br />";
      
    print_r(mb_split("一名", $str));
    

    输出:

    我是
    我是一名中国
    Array
    (
        [0] => 我是
        [1] => 中国人。i am a chinese.
    )
    
  • mb_strimwidth — 获取按指定宽度截断的字符串

  • mb_stripos — 大小写不敏感地查找字符串在另一个字符串中首次出现的位置

  • mb_stristr — 大小写不敏感地查找字符串在另一个字符串里的首次出现

  • mb_strlen — 获取字符串的长度

  • mb_strpos — 查找字符串在另一个字符串中首次出现的位置

  • mb_strrchr — 查找指定字符在另一个字符串中最后一次的出现

  • mb_strrichr — 大小写不敏感地查找指定字符在另一个字符串中最后一次的出现

  • mb_strripos — 大小写不敏感地在字符串中查找一个字符串最后出现的位置

  • mb_strrpos — 查找字符串在一个字符串中最后出现的位置

  • mb_strstr — 查找字符串在另一个字符串里的首次出现

  • mb_strwidth — 返回字符串的宽度

  • mb_substitute_character — 设置/获取替代字符

  • mb_substr_count — 统计字符串出现的次数

  • mb_substr — 获取部分字符串