我需要一个良好的快速功能,可以通过UTF8支持将字符串缩短到设定的长度。在末尾添加尾随'...'是一个加号。有人可以帮忙吗?
答案 0 :(得分:11)
假设安装了mb_*
个功能。
function truncate($str, $length, $append = '…') {
$strLength = mb_strlen($str);
if ($strLength <= $length) {
return $str;
}
return mb_substr($str, 0, $length) . $append;
}
请记住,这将添加一个字符(省略号)。如果您希望$append
包含在被截断的长度中,只需从您剪切的字符串长度减去mb_strlen($append)
。
显然,这也会在文字中间切断。
这是一个可以选择保留整个单词的版本......
function truncate($str, $length, $breakWords = TRUE, $append = '…') {
$strLength = mb_strlen($str);
if ($strLength <= $length) {
return $str;
}
if ( ! $breakWords) {
while ($length < $strLength AND preg_match('/^\pL$/', mb_substr($str, $length, 1))) {
$length++;
}
}
return mb_substr($str, 0, $length) . $append;
}
如果第三个参数为TRUE
,它将保留所有字母字符到第一个非字母字符。
答案 1 :(得分:2)
我猜你需要截断文字,所以这可能会有所帮助:
if (!function_exists('truncate_string')) { function truncate_string($string, $max_length) { if (mb_strlen($string, 'UTF-8') > $max_length){ $string = mb_substr($string, 0, $max_length, 'UTF-8'); $pos = mb_strrpos($string, ' ', false, 'UTF-8'); if($pos === false) { return mb_substr($string, 0, $max_length, 'UTF-8').'…'; } return mb_substr($string, 0, $pos, 'UTF-8').'…'; }else{ return $string; } } }
这就像@alex刚发布的那样,但它不会破坏文字。
答案 2 :(得分:0)
试试这个:
$length = 100;
if(mb_strlen($text, "utf-8") > $length){
$last_space = mb_strrpos(mb_substr($text, 0, $length, "utf-8"), " ", "utf-8");
$text = mb_substr($text, 0, $last_space, "utf-8")." ...";}
干杯...