/**
- 字符串截取
- @author gesion
- @param string $str 原始字符串
- @param int $len 截取长度(中文/全角符号默认为 2 个单位,英文/数字为 1。
-
例如:长度 12 表示 6 个中文或全角字符或 12 个英文或数字)
- @param bool $dot 是否加点(若字符串超过 $len 长度,则后面加 "...")
- @return string */ class Onens { public static function g_substr($str, $len = 12, $dot = true) { $i = 0; $l = 0; $c = 0; $a = array(); while ($l < $len) { $t = substr($str, $i, 1); if (ord($t) >= 224) { $c = 3; $t = substr($str, $i, $c); $l += 2; } elseif (ord($t) >= 192) { $c = 2; $t = substr($str, $i, $c); $l += 2; } else { $c = 1; $l++; } // $t = substr($str, $i, $c); $i += $c; if ($l > $len) break; $a[] = $t; } $re = implode('', $a); if (substr($str, $i, 1) !== false) { array_pop($a); ($c == 1) and array_pop($a); $re = implode('', $a); $dot and $re .= '...'; } return $re; } }