<?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));
时间: 2024-10-28 15:26:20