2010-08-17 69 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;