我會做的是按空間爆炸,然後找出可以放在一行而不超過33個字符的「單詞」的數量。
$words = explode(' ', $string); // Get all the "words" into one string
$lines = array(); // Array of the lines
$line = array(); // One line
for ($i = 0; $i < count($words); $i++) {
$new_line = array_merge($line, $words[$i]); // Previous line plus this word
$new_line_length = strlen(strip_tags(implode(' ', $new_line))); // Length of line
if ($new_line_length <= 33) { // Is this line under 33 characters?
$line[] = $words[$i]; // Yes, let's add this word to the line
} else { // No, too long.
$line[] = "\r"; // Add newline
$lines[] = $line; // Add $line to the $lines array
$line = array(); // Reset the line
}
}
$final_string = implode('', $lines); // Put the whole thing back into one string
我剛剛在這裏做了這個,並沒有測試過,但它是基本的一般想法。希望能幫助到你。祝你好運。 :)
編輯:加用strip_tags()來長檢查,以便標籤不會影響線的長度(因爲他們是無論如何不可見的)
您不能使用strip_tags? – 2011-12-19 22:43:56
我懷疑凱文想**保留標記**,只是減少內容。 – Quentin 2011-12-19 22:53:39
是的,標記需要保留。 – Kevin 2011-12-20 13:41:05