我想出了这个函数,它将给定的字符串截断为给定的字数或给定的字符数,无论是更短的字符.
然后,在字符数或字数限制之后切断所有内容后,它会在字符串后附加一个“…”.
然后,在字符数或字数限制之后切断所有内容后,它会在字符串后附加一个“…”.
如何从字符串中间删除字符/单词并用’…’替换它们而不是用’…’替换末尾的字符/单词?
这是我的代码:
function truncate($input,$maxWords,$maxChars){ $words = preg_split('/\s+/',$input); $words = array_slice($words,$maxWords); $words = array_reverse($words); $chars = 0; $truncated = array(); while(count($words) > 0) { $fragment = trim(array_pop($words)); $chars += strlen($fragment); if($chars > $maxChars){ if(!$truncated){ $truncated[]=substr($fragment,$maxChars - $chars); } break; } $truncated[] = $fragment; } $result = implode($truncated,' '); return $result . ($input == $result ? '' : '...'); }
例如,如果截断(‘快速棕色狐狸跳过懒狗’,8,16);被调用,16个字符更短,因此将发生截断.因此,’狐狸跳过懒狗’将被删除,’…’将被追加.
但是,相反,我怎么能有一半的字符限制来自字符串的开头,一半来自字符串的结尾,中间删除的内容被’…’替换?
所以,我想要回来的字符串,其中一个案例是:’quic …懒狗’.
$text = 'the quick brown fox jumps over the lazy dog'; $textLength = strlen($text); $maxChars = 16; $result = substr_replace($text,'...',$maxChars/2,$textLength-$maxChars);
$结果现在是:
the quic...lazy dog