/**
* 截取中文
* @param stirng $string 截取内容
* @param int $sublen 截取长度
* @param int $start 开始位置
* @param string $code 编码方式
* @return string
*/
function substr_zh($string, $sublen, $start = 0, $code = 'UTF-8')
{
if ($code == 'UTF-8') {
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa, $string, $t_string);
if (count($t_string[0]) - $start > $sublen) {
return join('', array_slice($t_string[0], $start, $sublen)) . "...";
//array_slice()在数组中根据条件取出一段值,参数(数组,开始位置,[长度])
} else {
return join('', array_slice($t_string[0], $start, $sublen));
}
} else {
$start = $start * 2;
$sublen = $sublen * 2;
$strlen = strlen($string);
$tmpstr = '';
for ($i = 0; $i < $strlen; $i++) {
if ($i > $start && $i < ($start + $sublen)) {
if (ord(substr($string, $i, 1)) > 129) {
//ord():返回字符串第一个字符的ASCII值
//substr():返回字符串的一部分
$tmpstr .= substr($string, $i, 2);
} else {
$tmpstr .= substr($string, $i, 1);
}
}
if (ord(substr($string, $i, 1)) > 129) {
$i++;
}
if (strlen($tmpstr) < $strlen) {
$tmpstr .= "...";
}
}
return $tmpstr;
}
}