2012-02-23 30 views
2

我目前正在開發一個php項目,我需要顯示最多100個字符的字符串,但不會拆分這個詞。將字符串顯示爲最大數量的字符而不會分裂字

例如,如果我有字符串

敏捷的棕色狐狸在懶惰的狗跳回到

說出第100字符是在「躍升」中間。 目前我使用substr($mystring, 0, 100)

然後,這將打印

敏捷的棕色狐狸JUM

而是在這種情況下,我會想打印

快速棕色狐狸

這是可能的解決

回答

5
$string = 'The quick brown fox jumped over the lazy dogs back'; 
$maxLength = 20; 

if (strlen($string) > $maxLength) { 
    $stringCut = substr($string, 0, $maxLength); 
    $string = substr($stringCut, 0, strrpos($stringCut, ' ')); 
} 

echo $string; 

// output: The quick brown fox 

的關鍵是使用strrpos在一個空間,而不是一個單詞的中間切斷。

注意:如果這些字符串的源使用多字節字符集(例如UTF-8),則需要使用multibyte等效函數。

+0

很酷,感謝您的幫助,效果很好。 – Boardy 2012-02-23 22:23:30

+0

不客氣。 – webbiedave 2012-02-23 22:23:58

+0

舊線程,但這將永遠切斷最後一個字,無論它超過最大長度,這可能不是人們想要的。 – 2015-04-29 10:09:46

0
//Set up - we need 100 characters 
$s="The quick brown fox jumped over the lazy dogs back"; 
$s="$s. $s. s."; 

//Cut 
$t=substr($s,0,100); 

//Trim 
$u=preg_replace('/^(.*).\s\w*$/','${1}',$t); 

//Output 
echo $u; 
1

PHP的wordwrap()函數可以提供幫助。 http://php.net/manual/en/function.wordwrap.php

它有點哈克因分隔字符串,但簡潔:

$str2 = wordwrap($str,20,'@@@@@'); 
$str_final = substr($str2,0,strpos($str2,'@@@@@')); 

請注意,如果你原來的字符串中包含這將打破「@@@@@」,我用它作爲我認爲獨特的分隔符不會出現在大多數英文字符串中。隨意將'@@@@@'更改爲更獨特或更獨特。