龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

mb_substr增强,解决中文字符串乱码问题

时间:2014-07-22 14:48来源: 作者: 点击:
分享到:
解决使用mb_substr截取字符串时中文乱码的问题注:mb_substr 可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码
解决使用mb_substr截取字符串时中文乱码的问题

注:mb_substr 可以用来截取纯中文字符串,但是当中文字符串中含有数字或者英文字符或者中文状态下一个标点符号时会出现截取时中文乱码问题,因此这个函数就是用来解决这个问题的。

说明:经过个人测试,没有发现问题,如发现问题,请在回复中指出并付上案例,多谢!
/**
 * 中英文字符截取函数,要求汉字字符编码必须为utf-8
 * $offset  跳过的字符个数
 * $length	截取的字符数个数
 */
function zh_substr($str, $offset, $length = -1) {
	$ret = '';
	$bytelen = mb_strlen($str); //字符串的字节数
	$start = 0;
	$end = 0;
	$nums = 0; 
	$count = 1;
	for ( $i = 0; $i < $bytelen; $i++ ) {
		if ( $nums == $offset ) {
			$start = $i;
			break;
		}
		if ( ord($str{$i}) > 0x80 || $count > 1 ) { //汉字
			if ( $count % 3 === 0 ) { //统计出一个汉字
				$nums += 1;
				$count = 1;
			} else {
				$count += 1;	
			}
			continue;
		}
		$nums += 1; //统计出一个英文
	}
	$nums = 0; 
	$count = 1;
	for ( $i = $start; $i < $bytelen; $i++ ) {
		if ( $nums == $length ) {
			break;
		}
		if ( ord($str{$i}) > 0x80 || $count > 1 ) { //汉字
			if ( $count % 3 === 0 ) { //统计出一个汉字
				$nums += 1;
				$count = 1;
				$end += 3;
			} else {
				$count += 1;	
			}
			continue;
		}
		$nums += 1; //统计出一个英文
		$end += 1;
	}
	$ret = mb_substr($str, $start, $end);
	return $ret;
}
精彩图集

赞助商链接