【发布时间】:2011-08-11 18:15:42
【问题描述】:
我需要一个很好的快速函数,它可以通过 UTF8 支持将字符串缩短到设定的长度。在末尾添加尾随“...”是一个加号。有人可以帮忙吗?
【问题讨论】:
我需要一个很好的快速函数,它可以通过 UTF8 支持将字符串缩短到设定的长度。在末尾添加尾随“...”是一个加号。有人可以帮忙吗?
【问题讨论】:
假设已安装 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,它将保留所有字母字符,直到第一个非字母字符。
【讨论】:
我猜你需要截断文本,所以这可能会有所帮助:
if (!function_exists('truncate_string')) { 函数 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'); 如果($pos === 假){ return mb_substr($string, 0, $max_length, 'UTF-8').'...'; } return mb_substr($string, 0, $pos, 'UTF-8').'...'; }别的{ 返回$字符串; } } }这有点像@alex 刚刚发布的内容,但不会打断文字。
【讨论】:
试试这个:
$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")." ...";}
干杯...
【讨论】: