天天看點

PHP中文無亂碼截取字元串

  //第一個參數$str 必須 原始字元串。

  //第二個參數$start 可選 開始截取字元串的位置。預設等于0。

  //第三個參數$len 可選 截取字元串的長度,預設等于原始字元串的總長度。

  //第四個參數$char 可選 原始字元串的編碼,預設為GB2312。可以被設定為utf-8,gb2312,gbk,big5。

  //該函數傳回原始字元串的第$start開始,長$len個的字元。

  

  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無效';

  }

  }