2012-12-18 22 views
0

目前,我通過文字這一功能,以縮短下來的標語,其中有255個字符的限制:如何在切割字符串時切斷bbcode?

function myTruncate($string, $limit, $break=".", $pad="...") 
{ 
    // return with no change if string is shorter than $limit 
    if(strlen($string) <= $limit) 
    { 
     return $string; 
    } 

    // is $break present between $limit and the end of the string? 
    if(false !== ($breakpoint = strpos($string, $break, $limit))) 
    { 
     if($breakpoint < strlen($string) - 1) 
     { 
      $string = substr($string, 0, $breakpoint) . $pad; 
     } 
    } 
    return $string; 
} 

問題是,它不斷地切斷bbcodes,有沒有辦法把它完成一切它是否被切斷,如果它的內部任何bbcode標籤?

+1

你是如何渲染縮短的價值?如果你正在渲染它(沒有BBcode),考慮從結果中省略BBcode。 – Matthew

+0

雖然我確實想要一些bbcode。 – NaughtySquid

回答

0

有可能不容易解決了這一點。您需要檢查整個輸入字符串字符以記住內存堆棧(也稱爲Lexer)中的每個打開的bbcode標記。然後,如果您的字符限制已經達到,您需要附加您存儲在堆棧中的所有關閉bbcode標籤。

此外,您的截斷函數有一個很大的缺點,即它將bbcode標記爲文本長度的一部分。試想一個用戶通過[url = http://非常長的鏈接]圖片[/ url]發佈250個字符長的鏈接。 Google圖片例如創建了這樣長的鏈接。

最好的辦法就是徹底去掉這些情況下的bbcode,除非這些特性能證明解決方案的編程時間爲5-20小時。