//第一个参数$str 必须 原始字符串。
//第二个参数$start 可选 开始截取字符串的位置。默认等于0。
//第三个参数$len 可选 截取字符串的长度,默认等于原始字符串的总长度。
//第四个参数$char 可选 原始字符串的编码,默认为GB2312。可以被设置为utf-8,gb2312,gbk,big5。
//该函数返回原始字符串的第$start开始,长$len个的字符。
/* 例如:
$str = 'PHP无乱码截取字符串';
echo new_substr($str,3,5,'gb2312');
将输出的是: "无乱码截取"
*/
function new_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)
return implode('',array_slice($matches[0],$start,$len));
else
return false;
}else{
return '参数$char无效';
}
}
//第二个参数$start 可选 开始截取字符串的位置。默认等于0。
//第三个参数$len 可选 截取字符串的长度,默认等于原始字符串的总长度。
//第四个参数$char 可选 原始字符串的编码,默认为GB2312。可以被设置为utf-8,gb2312,gbk,big5。
//该函数返回原始字符串的第$start开始,长$len个的字符。
/* 例如:
$str = 'PHP无乱码截取字符串';
echo new_substr($str,3,5,'gb2312');
将输出的是: "无乱码截取"
*/
function new_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)
return implode('',array_slice($matches[0],$start,$len));
else
return false;
}else{
return '参数$char无效';
}
}