2010-08-17 71 views
11

目前,我用它来截断字符串的方法是:echo substr($message, 0, 30)."..";PHP:正确截断字符串用“”

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

+0

为什么两个点代替通常的三个点?不是每一个偏离标准的都是好的。如果你关心“丢失”字符,你可以在* one *字符中使用双曲椭圆(这就是所谓的三个点),这要归功于Unicode:'...'(尝试用鼠标选择它,你会看到它确实只有一个字符)。 – 2010-08-17 13:35:58

+0

另外,双曲线省略号不是三点或周期。省略号是一个完全独立的实体,不应该被三个点代替,因为它们与字符具有不同的属性,并且在文本中占用不同的间距。改用实际的省略号。 – junkfoodjunkie 2016-12-14 21:32:19

回答

15

只检查长度,看它是否超过30个字符或不:

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

在我的排版鸡蛋里挑骨头有这样补充:使用正确的字符是包括这个人物省略号, 三个个点...或其HTML实体…

+0

哈!你更快18秒:) – sprain 2010-08-17 13:31:16

+1

+1因为使用… – fabrik 2010-08-17 13:32:07

+2

(特别是@fabrik和谁投票给他:)在HTML中使用命名实体已弃用 - 不要这样做,因为(现代!)浏览器与XHTML一起使用时会窒息。更好的解决方案是直接使用字符,并使用正确的编码,即UTF-8或类似的编码。但+1提到正确的符号。 – 2010-08-17 13:37:37

5

只需检查原始字符串的长度,看看是否需要截断。如果它比30长,截断字符串,并添加结束点:

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

添加strlen()条件?

1

你可以这样做:

echo strlen($message) > 30 ? substr($message, 0, 30) . '..' : $mssage; 

基本上,它像(但短):

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

更短,但它是野蛮的语言,不像简单和简单的英语'如果str [len] [消息] [超过30 ...' – 2010-08-17 13:33:52

+0

是的,但我喜欢这种事情的三元语法。它更短,更重要。它也是其使用的教科书场景(与两个分支具有相同“结果”的分支逻辑)...... – ircmaxell 2010-08-17 13:42:01

4

应该指出的是,strlen的()函数不计的字符,它字节数为单位。如果您使用的是UTF-8编码,则最终可能会有1个字符计算为最多4个字节。做到这一点的正确方法是这样的:

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