支持多种编码的中文字符串截取函数! AND 函数实现解压功能

CSND     ice_berg16 (寻梦的稻草人)

支持多种编码的中文字符串截取函数!

function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
 if(function_exists("mb_substr"))
  return mb_substr($str, $start, $length, $charset);
 $re['utf-8']   = "/[/x01-/x7f]|[/xc2-/xdf][/x80-/xbf]|[/xe0-/xef][/x80-/xbf]{2}|[/xf0-/xff][/x80-/xbf]{3}/";
 $re['gb2312'] = "/[/x01-/x7f]|[/xb0-/xf7][/xa0-/xfe]/";
 $re['gbk']   = "/[/x01-/x7f]|[/x81-/xfe][/x40-/xfe]/";
 $re['big5']   = "/[/x01-/x7f]|[/x81-/xfe]([/x40-/x7e]|/xa1-/xfe])/";
 preg_match_all($re[$charset], $str, $match);
 $slice = join("",array_slice($match[0], $start, $length));
 if($suffix) return $slice."…";
 return $slice;
}

CSND    caaclxf(有人说我的名字很长)

SMS对纯ACSII用7BIT压缩后再传送。
这个是函数实现解压功能。
function Decode7bit($str7bit)
{
 for ($i=0; $i<strlen($str7bit);$i+=2)
 {
  $str = decbin(hexdec($str7bit[$i].$str7bit[$i+1]));
  $arrBin[] = sprintf("%08s", $str);
 }
 //print_r($arrBin);
 $i=0;
 $move =1;
 while ($i<count($arrBin)) {
  if ($i==0) {
   $dst = substr($arrBin[$i],$move);
  }elseif ($i%7==0 && $i!=0) {
   //special char
   switch ($left)
   {
    case '0000000':
     $left = '1000000';
     break;
   }
   $arrBinDst[] =$left;
   $strDst .=chr(bindec($left));
   $move=1;
   $left='';
  }
  $dst = substr($arrBin[$i],$move).$left;
  $left =substr($arrBin[$i],0,$move);
  $move++;
  $i++;
  //special char
  switch ($dst)
  {
   case '0000000':
    $dst = '1000000';
    break;
  }
  $arrBinDst[]=$dst;
  $strDst .=chr(bindec($dst));
 }
 //print_r($arrBinDst);
 return $strDst;
 }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值