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;
}