PHP中文无乱码截取字符串

  //第一个参数$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无效';
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值