PHP:使用“正确截断字符串”&引用;

PHP:使用“正确截断字符串”&引用;,php,Php,目前,我用来截断字符串的方法是:echosubstr($message,0,30)。” 如何仅在字符串被截断的情况下显示点?只需检查长度是否超过30个字符: if (strlen($message) > 30) { echo substr($message, 0, 30).".."; } else { echo $message; } 我的排版技巧是:正确使用的字符是省略号,省略号包括这个字符..,三个点..,或者它的HTML实体…只需检查原始字符串的长度,看看是

目前,我用来截断字符串的方法是:
echosubstr($message,0,30)。”


如何仅在字符串被截断的情况下显示点?

只需检查长度是否超过30个字符:

if (strlen($message) > 30)
{
    echo substr($message, 0, 30)."..";
}
else
{
    echo $message;
}

我的排版技巧是:正确使用的字符是省略号,省略号包括这个字符
..
,三个点
..
,或者它的HTML实体

只需检查原始字符串的长度,看看是否需要截断它。如果长度大于30,则截断字符串并在末尾添加点:

if (strlen($message) > 30) {
 echo substr($message, 0, 30)."..";
} else {
 echo $message;
}
添加一个strlen()
条件?

您可以执行以下操作:

echo strlen($message) > 30 ? substr($message, 0, 30) . '..' : $mssage;
基本上,它就像(但更短):


应该注意,strlen()函数不计算字符数,而是计算字节数。如果您使用的是UTF-8编码,那么最终可能会得到1个字符,最多可计为4个字节。正确的方法是:

echo mb_strlen($message) > 30 ? mb_substr($message, 0, 30) . "..." : $message;

哈你比我快了18秒:)(特别是@fabrik和投票支持他的人:)在HTML中使用命名实体是不可取的——不要这样做,因为(现代的!)浏览器在与XHTML一起使用时会阻塞它。更好的解决方案是始终直接使用字符以及正确的编码,即UTF-8或类似编码。但还是要加上+1来表示正确的符号。@Konrad Rudolph:谢谢!看来我还没有参与到这件事中。修正了我的答案!谢谢康拉德,这对我来说是新的!我认为你应该使用
mb_substr()
来保证UTF-8的安全:)更短,但这是野蛮的语言,不像简单的英语
如果str[ing]len[gth][of]消息超过30…
正确,但我喜欢这种东西的三元语法。它更短,更切题。这也是它使用的教科书场景(两个分支具有相同“结果”的分支逻辑)……为什么用两点代替通常的三点?并非每一次偏离规范都是好的。如果您关心“丢失的”字符,您可以将双曲椭圆(这就是三个点的名称)放在一个字符中,多亏了Unicode:
(尝试用鼠标选择它,您会发现它实际上只有一个字符)。此外,双曲椭圆不是三个点或句点。省略号是一个完全独立的实体,不应随意用三个点替换,因为它们作为字符具有不同的属性,并且在文本中占据不同的间距。改用实际的省略号字符。
if (strlen($message) > 30) {
    echo substr($message, 0, 30) . "..";
} else {
    echo $message;
}
echo mb_strlen($message) > 30 ? mb_substr($message, 0, 30) . "..." : $message;