mb_strpos():偏移量不包含在字符串中

时间:2018-12-17 10:07:36

标签: php

我发现此功能可以为长文本创建摘录。我也使用这种方法来管理èéàòù…等口音。

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

如何修复上次测试的错误?

1 个答案:

答案 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);