PHP 如果长度超过限制,则截断字符串,并在末尾添加一些省略.类似于 Ruby


php truncate string if longer than limit and put some omission at the end..similar to ruby

我在最近的 php 代码中多次需要此功能,所以我正在寻找一个函数来完成这项工作,如果有的话。

如果字符串大于限制,则将其截断并放置一些省略文本,例如...(continued)..

就像在 ruby 中一样,我们在字符串上有截断函数

"And they found that many people were sleeping better.".truncate(25, :omission => "... (continued)")

我可以通过首先检查长度超过..然后修剪,然后连接来做到这一点......但我正在寻找一些类似的功能。

function truncate($string,$length=100,$appendStr="..."){
    $truncated_str = "";
    $useAppendStr = (strlen($string) > intval($length))? true:false;
    $truncated_str = substr($string,0,$length);
    $truncated_str .= ($useAppendStr)? $appendStr:"";
    return $truncated_str;
}

您甚至可以编辑该函数,以便您可以选择以确切的最大长度进行剪切或尊重单词边界......
选择基本上是你的

function substr_with_ellipsis($string, $chars = 100)
{
    preg_match('/^.{0,' . $chars. '}(?:.*?)'b/iu', $string, $matches);
    $new_string = $matches[0];
    return ($new_string === $string) ? $string : $new_string . '…';
}
class StringHelper
{
    public static function truncate($string, $length = 100, $append = "...")
    {
        if (strlen($string) <= intval($length)) {
            return $string;
        }
        return substr($string, 0, $length) . $append;
    }
}

我与 Yii 框架一起使用的用于截断的静态通用方法。

建立在

@OkekeEmmanuelOluchu的答案之上。 有点短,更干净:

function truncateString($string, $length = 100, $append = "..."){
    $truncated_str = substr($string, 0, $length);
    $truncated_str .= strlen($string) > intval($length) ? $append : "";
    return $truncated_str;
}