1. 程式人生 > >php中計算中文字串長度、擷取中文字串

php中計算中文字串長度、擷取中文字串

header('Content-type:text/html;charset=utf-8');
/**
* 可以統計中文字串長度的函式
* @param $str 要計算長度的字串
* @param $type 計算長度型別,0(預設)表示一箇中文算一個字元,1表示一箇中文算兩個字元
*
*/
function abslength($str)
{
if(empty($str)){
return 0;
}
if(function_exists('mb_strlen')){
return mb_strlen($str,'utf-8');
}
else {
preg_match_all("/./u", $str, $ar);
return count($ar[0]);
}
}
$str = '我們都是中國人啊,ye!';
$len = abslength($str);
var_dump($len); //return 12
$len = abslength($str,'1');
echo '<br />'.$len; //return 22

/*
utf-8編碼下擷取中文字串,引數可以參照substr函式
@param $str 要進行擷取的字串
@param $start 要進行擷取的開始位置,負數為反向擷取
@param $end 要進行擷取的長度
*/
function utf8_substr($str,$start=0) {
if(empty($str)){
return false;
}
if (function_exists('mb_substr')){
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return mb_substr($str,$start,$end,'utf-8');
}
else {
mb_internal_encoding("UTF-8");
return mb_substr($str,$start);
}

}
else {
$null = "";
preg_match_all("/./u", $str, $ar);
if(func_num_args() >= 3) {
$end = func_get_arg(2);
return join($null, array_slice($ar[0],$start,$end));
}
else {
return join($null, array_slice($ar[0],$start));
}
}
}
$str2 = 'wo要擷取zhongwen';
echo '<br />';
echo utf8_substr($str2,0,-4); //return wo要擷取zhon