/**
* Character interception support 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 = <= $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 (<= $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;
}