/*
*
* 字符截取 支持UTF8/GBK
* @param $string
* @param $length
* @param $dot
*/
function str_cut($
string, $length, $dot =
'
...
') {
$strlen = strlen($
string);
if($strlen <= $length)
return $
string;
$
string = str_replace(array(
'
',
'
',
'
&
',
'
"
',
'
'
',
'
“
',
'
”
',
'
—
',
'
<
',
'
>
',
'
·
',
'
…
'), array(
'
∵
',
'
',
'
&
',
'
"
',
"
'
",
'
「
',
'
」
',
'
—
',
'
<
',
'
>
',
'
·
',
'
…
'), $
string);
$strcut =
'';
if(strtolower(CHARSET) ==
'
utf-8
') {
$length = intval($length-strlen($dot)-$length/
3);
$n = $tn = $noc =
0;
while($n < strlen($
string)) {
$t = ord($
string[$n]);
if($t ==
9 || $t ==
10 || (
32 <= $t && $t <=
126)) {
$tn =
1; $n++; $noc++;
} elseif(
194 <= $t && $t <=
223) {
$tn =
2; $n +=
2; $noc +=
2;
} elseif(
224 <= $t && $t <=
239) {
$tn =
3; $n +=
3; $noc +=
2;
} elseif(
240 <= $t && $t <=
247) {
$tn =
4; $n +=
4; $noc +=
2;
} elseif(
248 <= $t && $t <=
251) {
$tn =
5; $n +=
5; $noc +=
2;
} elseif($t ==
252 || $t ==
253) {
$tn =
6; $n +=
6; $noc +=
2;
}
else {
$n++;
}
if($noc >= $length) {
break;
}
}
if($noc > $length) {
$n -= $tn;
}
$strcut = substr($
string,
0, $n);
$strcut = str_replace(array(
'
∵
',
'
&
',
'
"
',
"
'
",
'
「
',
'
」
',
'
—
',
'
<
',
'
>
',
'
·
',
'
…
'), array(
'
',
'
&
',
'
"
',
'
'
',
'
“
',
'
”
',
'
—
',
'
<
',
'
>
',
'
·
',
'
…
'), $strcut);
}
else {
$dotlen = strlen($dot);
$maxi = $length - $dotlen -
1;
$current_str =
'';
$search_arr = array(
'
&
',
'
',
'
"
',
"
'
",
'
「
',
'
」
',
'
—
',
'
<
',
'
>
',
'
·
',
'
…
',
'
∵
');
$replace_arr = array(
'
&
',
'
',
'
"
',
'
'
',
'
“
',
'
”
',
'
—
',
'
<
',
'
>
',
'
·
',
'
…
',
'
');
$search_flip = array_flip($search_arr);
for ($i =
0; $i < $maxi; $i++) {
$current_str = ord($
string[$i]) >
127 ? $
string[$i].$
string[++$i] : $
string[$i];
if (in_array($current_str, $search_arr)) {
$key = $search_flip[$current_str];
$current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
}
$strcut .= $current_str;
}
}
return $strcut.$dot; }