支持多种编码的中文字符串截取函数! 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 {
  $str = decbin(hexdec($str7bit[$i].$str7bit[$i+1]));
  $arrBin[] = sprintf("%08s", $str);
 }
 //print_r($arrBin);
 $i=0;
 $move =1;
 while ($i  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;
 }


 

你可能感兴趣的:(代码收藏,dst,function,sms,join)