用“...”主体缩短字符串

问题描述 投票:0回答:4

就像 iPhone 的应用程序名称较长一样,名称也会缩短。我真的很喜欢这种缩短名称或字符串的方法,而不是在其中附加“...”子句。抱歉,如果我感到困惑,我无法解释我想要做什么。所以我将展示一个例子!

这就是我所拥有的,将“...”附加到缩短的字符串(在 PHP 中)

<?php
  $string = "This is a test script";

  if (strlen($string) >= 14)
    echo(substr($string), 0, 13). "..."); // This is a test...
  else
    echo($string); // This is a test script
?>

我想拆分名称或字符串并保留前 10 个字符,然后在中间插入“...”,最后取出字符串的结尾 5 个字母并显示它们。我在想一些类似的事情:

<?php
  $string = "This is a test script";

  if (strlen($string) >= 20)
    echo(substr($string, 0, 10). "..." .substr($string, 15, 20)); //This is a ...script
  else
    echo($string);
?>

但要意识到,当最后的字母超过 5 个时,这是行不通的。任何指向写入方向的指针都会很棒,谢谢!

php string
4个回答
18
投票
if (strlen($string) >= 20) {
    echo substr($string, 0, 10). " ... " . substr($string, -5);
}
else {
    echo $string;
}

2
投票

substr()
的第三个参数是长度,而不是结束。只需通过
5
即可。

还有,

substr($string, -5)


1
投票

更通用的解决方案

function str_short($string, $length, $lastLength = 0, $symbol = '...')
{
    if (strlen($string) > $length) {
        $result = substr($string, 0, $length - $lastLength - strlen($symbol)) . $symbol;
        return $result . ($lastLength ? substr($string, - $lastLength) : '');
    }

    return $string;
}

用法

str_short(string, 20, 5, ' ... ')}}

0
投票

substr 将单词切成两半。此外,如果 word 包含 UTF8 字符,它也会出现错误。所以最好使用mb_substr:

$string = mb_substr('word word word word', 0, 10, 'utf8').'...';
© www.soinside.com 2019 - 2024. All rights reserved.