作者:AngryFox 分类: Uncategorized April 9th, 2012 暂无评论

传说比mb_substr、mb_strlen效率高

主要原理是根据UTF-8的编码特点
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
来获取字符边界,从而确定一个字所占字节数,并处理成数组。
function str_split_utf8($str) {
	// place each character of the string into and array
	$split = 1;
	$array = array(); $len = strlen($str);
	for ( $i = 0; $i < $len; ){
		$value = ord($str[$i]);
		if($value > 0x7F){
			if($value >= 0xC0 && $value <= 0xDF)
				$split = 2;
			elseif($value >= 0xE0 && $value <= 0xEF)
				$split = 3;
			elseif($value >= 0xF0 && $value <= 0xF7)
				$split = 4;
			elseif($value >= 0xF8 && $value <= 0xFB)
				$split = 5;
			elseif($value >= 0xFC)
				$split = 6; 

		} else {
			$split = 1;
		}
		$key = '';
		for ( $j = 0; $j < $split; ++$j, ++$i ) {
			$key .= $str[$i];
		}
		$array[] = $key;
	}
	return $array;
}