我发现此功能可以为长文本创建摘录。我也使用这种方法来管理èéàòù…等口音。
function excerpt($string, $lenght = 50, $popover = false, $ellipsed = false) {
if ( $ellipsed ) {
$ellipse = "...";
if ( $popover )
$ellipse = '<span title="More info" data-toggle="popover" data-trigger="hover" data-content="' . $string . '">...</span>';
} else {
$ellipse = "";
}
$boundaryPos = mb_strrpos(mb_substr($string, 0, mb_strpos($string, ' ', $lenght)), ' ');
return mb_substr($string, 0, $boundaryPos === false ? $lenght : $boundaryPos) . $ellipse;
}
一些测试:
echo excerpt("Il treno è partito", 11);
//RETURN Il treno è
echo excerpt("Il treno è partito", 15);
//RETURN Il treno è part
echo excerpt("Il treno è partito", 20);
//RETURN WARNING mb_strpos(): Offset not contained in string
如何修复上次测试的错误?
答案 0 :(得分:1)
您需要检查字符串的长度是否小于您的length参数,因为找不到长度为19的字符串的第20个偏移量。
P.S。摘录功能的长度参数中也有错字。
function excerpt($string, $length = 50, $popover = false, $ellipsed = false) {
if ( $ellipsed ) {
$ellipse = "...";
if ( $popover )
$ellipse = '<span title="More info" data-toggle="popover" data-trigger="hover" data-content="' . $string . '">...</span>';
} else {
$ellipse = "";
}
if ( strlen($string) < $length ) {
return $string . $ellipse;
}
$boundaryPos = mb_strrpos(mb_substr($string, 0, mb_strpos($string, ' ', $length)), ' ');
return mb_substr($string, 0, $boundaryPos === false ? $length : $boundaryPos) . $ellipse;
}
echo excerpt("Il treno è partito", 11);
echo excerpt("Il treno è partito", 20);