php截取字符串各种编码函数和计算utf-8编码字符长度函数
/* 字符串截取,支持中文和其他编码
+---------------------------------------------------------- * @static
* @access public
+---------------------------------------------------------- * @param string $str 需要转换的字符串
* @param string $start 开始位置
* @param string $length 截取长度
* @param string $charset 编码格式
* @param string $suffix 截断显示字符
+---------------------------------------------------------- * @return string
+---------------------------------------------------------- */
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if($suffix)
$suffixStr = "…";
else
$suffixStr = "";
if(function_exists("mb_substr"))
return mb_substr($str, $start, $length, $charset).$suffixStr;
elseif(function_exists('iconv_substr')) {
return iconv_substr($str,$start,$length,$charset).$suffixStr;
}
$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));
return $slice.$suffixStr;
}
/*UTF8字符串长度
下面定义的strlen_utf8函数可以统计UTF-8字符串的长度,但不同的是,该函数并不考虑
字节,这有些类似 Javascript 中字符串的length方法,一个字符全部按 1 个长度计算。
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
) */
function strlen_utf8($str) {
$i = 0;
$count = 0;
$len = strlen ($str); while ($i < $len) { $chr = ord ($str[$i]); $count++;
$i++;
if($i >= $len) break; if($chr & 0x80) { $chr <<= 1;
while ($chr & 0x80) { $i++;
$chr <<= 1;
}
}
}
return $count;
}
$str = "www.phpq.net-PHP资讯";
echo strlen_utf8($str);
?>