支持utf8的str_split函数

本文介绍了一种PHP函数,用于将UTF-8编码的字符串按指定字节数进行分片处理,适用于处理包含中文字符的字符串。通过解析UTF-8编码规则,该函数能够确保每个分片不会在多字节字符中间截断。
<?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));

 

转载于:https://www.cnblogs.com/buexplain/p/4731919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值