我想在15个字符后剪切一个字符串

时间:2014-05-06 15:22:09

标签: php

在我的php文件中,我正在使用

$html .= $prev->link_name;

显示商家信息的名称。不幸的是,一些列表有很多字符,所以我想在15个字符之后剪切它们并添加三个点" ..."在商品名称的末尾。

我知道我必须添加类似的内容:

 $string = (strlen($string) > 15) ? substr($string,0,15).'...' : $string;

但我不确切知道如何使用它:

$html .= $prev->link_name;

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

如有疑问,请将其分开:

$string = $prev->link_name;

if (mb_strlen($string) > 15)
  $string = mb_substr($string, 0, 15) . '...';

$html .= $string;

或者你可以在一行中完成:

$html .= (mb_strlen($prev->link_name) > 15) ? mb_substr($prev->link_name, 0, 15) . '...': $prev->link_name;

但是如果你很难阅读这样的一行,那么花几行来提高它的可读性会更好。不要感到羞耻:单行版本是一个非常长的版本,很难理解所有这些不同的表达方式。在这种情况下,我会自己选择多行版本。

-edit -

根据评论中的请求更新为使用multibyte string functions

答案 1 :(得分:4)

$html .= (strlen($prev->link_name) > 15) ? substr($prev->link_name,0,15).'...' : $prev->link_name;

答案 2 :(得分:0)

在检查字符长度后,您需要检查包含名称的字符串并使用。例如,如果我们有一些字符串:

//Some string
$string = 'Yuriy        Ivanovich  '; //Replace with   $string = $prev->link_name;

/* 
The responses above, we would get an answer next

string 'Yuriy        Iv...' (length=18)

Not correct! Change it!
*/

//Remove extra spaces 
$string = preg_replace ('/\s+/', ' ',  $string) ;

//Check if string not empty
if(!empty($string)){
    if(mb_strlen($string) > 15)
        $string = mb_substr($string, 0, 15) . '...';
}
$html .= $string;

var_dump($html);

结果:

string 'Yuriy Ivanovich...' (length=18)