码迷,mamicode.com
首页 > 其他好文 > 详细

支持utf8的str_split函数

时间:2015-08-15 11:47:07      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

<?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));

 

支持utf8的str_split函数

标签:

原文地址:http://www.cnblogs.com/buexplain/p/4731919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!