zoukankan      html  css  js  c++  java
  • 支持utf8的str_split函数

    <?php
    header("Content-type: text/html; charset=utf-8");
    /**
     * 按字节数对字符串进行分片
     * @param  $str    需要分片的字符串
     * @param  $length 每片字符串的字节数
     * @return 分片后的数组
     */
    function utf8_str_split($str,$length) {
        if (!preg_match("/([x81-xfe][x40-xfe])/", $str, $match)) return str_split($str, $length); //不包含中文的字符串
        $str_length = strlen($str);
        if($str_length <= $length) return array($str);
        $results = array();
        $tmp_str = '';
        $tmp_str_length = 0;
        for ($i=0; $i < $str_length; $i++) { 
            $ord = ord($str[$i]);
            if($ord < 128) { //单字节 0~127
                $tmp_str .= $str[$i];
                $tmp_str_length += 1;
            }elseif($ord < 224) { //双字节 192~223
                $tmp_str .= $str[$i].$str[$i+1];
                $i += 1;
                $tmp_str_length += 2;
            }elseif($ord < 240) { //三字节 224~237
                $tmp_str .= $str[$i].$str[$i+1].$str[$i+2];
                $i += 2;
                $tmp_str_length += 3;
            }elseif ($ord < 248) { //四字节 240~247
                $tmp_str .= $str[$i].$str[$i+1].$str[$i+2].$str[$i+3];
                $i += 3;
                $tmp_str_length += 4;
            }
            //判断下一次截取时 字符字节数是否会大于需要的字节数 或者已截取到最后字节 
            if(($tmp_str_length+4) > $length || ($i+1) == $str_length) { 
                $results[] = $tmp_str;
                $tmp_str = '';
                $tmp_str_length = 0;
            }
        }
        return $results;
    }
    $a = '截取的变量是宽度width而不是长度length。';
    $length = 10;
    print_r(utf8_str_split($a,$length));
  • 相关阅读:
    Spring Security(06)——AuthenticationProvider
    Spring Security(05)——异常信息本地化
    Spring Security(04)——认证简介
    Spring Security(03)——核心类简介
    Spring Security(02)——关于登录
    Spring Security(01)——初体验
    核心服务
    技术概述
    Security命名空间配置
    Spring Security
  • 原文地址:https://www.cnblogs.com/buexplain/p/4731919.html
Copyright © 2011-2022 走看看