php自定义截取中文字符串-utf8版

php自定义截取中文字符串-utf8版

UTF-8的编码范围(utf-8使用1-6个字节编码字符,实际上只使用了1-4字节):

1个字节:00——7F
2个字节:C080——DFBF
3个字符:E08080——EFBFBF
4个字符:F0808080——F7BFBFBF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
$str = 'abcd我是中国人';
 
echo strlen($str), '<br/>';
 
 
echo mstrlen($str), '<br/>';
 
echo msubstr($str, 3, 9);
 
/**
 * 统计utf8下字符串长度
 */
function mstrlen($str) {
   $len = 0;
   $i = 0;
   $slen = strlen($str);
    
   while ($i < $slen) {
       $o = ord($str[$i]);
       if ($o < 127) {
           $i++;
       } elseif ($o < 224) {
           $i+=2;
       } else {
           $i+=3;
       }
       $len++;
   }
   return $len;
}
/**
 * 截取utf8编码下的字符串
 */
function msubstr($str, $start, $length) {
    $len = mstrlen($str);
    if($start < 0) {
        $start += $len;
        if($start < 0) {
            $start = 0;
        }
    }
     
    $slen = strlen($str);
    $index = 0;
    for ($i = 0; $i<$start && $i<$slen; $i++) {
        $o = ord($str[$index]);
        if ($o < 127) {
            $index++;
        }elseif ($o < 224) {
            $index+=2;
        } else {
            $index +=3;
        }
    }
     
    $length+=$index;
     
    $newStr = '';
    for ($i = $index; $i < $length && $i<$slen; $i++) {
        $o = ord($str[$i]);
        if ($o < 127) {
            $newStr .= $str[$i];
        } elseif ($o < 224) {
            $newStr .= substr($str, $i, 2);
            $i+=1;
            $length++;
        } else {
            $newStr .= substr($str, $i, 3);
            $i+=2;
            $length+=2;
        }
    }
     
    return $newStr;
}

  

 

模板哥 - 网页模板,网站模板,DIV模板,CSS模板,前端模板,官网,官网模板,企业网站模板下载,模板下载

 

posted @   周自横  阅读(522)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示