PHP中文无乱码截取字符串

//第一个参数$str必须原始字符串。

//第二个参数$start可选开始截取字符串的位置。默认等于0。

//第三个参数$len可选截取字符串的长度,默认等于原始字符串的总长度。

//第四个参数$char可选原始字符串的编码,默认为GB2312。可以被设置为utf-8,gb2312,gbk,big5。

//该函数返回原始字符串的第$start开始,长$len个的字符。

/*例如:

$str='PHP无乱码截取字符串';

echonew_substr($str,3,5,'gb2312');

将输出的是:"无乱码截取"

*/

functionnew_substr($str,$start=0,$len='',$char='gb2312'){

if(empty($len))

$len=strlen($str);

switch($char){

case'utf-8':

$rev='/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/';

break;

case'gb2312':

$rev='/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/';

break;

case'gbk':

$rev='/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/';

break;

case'big5':

$rev='/[\x01-\x7f]|[\x81-\xfe]|([\x40-\x7e]|[\xa1-\x7f])/';

break;

}

if(!empty($rev)){

if(preg_match_all($rev,$str,$matches)>0)

returnimplode('',array_slice($matches[0],$start,$len));

else

returnfalse;

}else{

return'参数$char无效';

}

}

相关推荐