2009-04-29 61 views
3

我正在使用Richtext框控件在一個頁面中發佈一些數據。 ,我將數據保存到我的HTML標記防爆db表:這是<b>我大膽</B >文本PHP:顯示修剪後的HTML標記時出現HTML標記問題

我在顯示另一頁本專欄的前50個字符。現在,當我保存時,如果我保存了一個句子(超過50個字符),應用了粗體標記,並在我的其他頁面中修剪此字段(用於記錄前50個字符),則會丟失結束標記(</b > )。因此,粗體正在應用於該頁面中的其他內容。

我該如何解決這個問題?我如何檢查所有打開的標籤沒有關閉?有沒有什麼方法可以在PHP中執行此操作。是否有任何功能來刪除我的整個HTML標記/標記並給我的文字作爲純文本?

回答

2

$textWithoutTags = strip_tags($html); 
1

我一般用HTML::Truncate這一點。當然,作爲一個Perl模塊,您將無法直接在PHP中使用它 - 但源代碼確實顯示了一種工作方式(即使用HTML解析器)。

另一種方法,可能是截斷當前正在執行的操作,然後嘗試使用Tidy進行修復。

1

如果您希望HTML標籤保留,但要正確關閉,請參閱PHP: Truncate HTML, ignoring tags。否則,請繼續閱讀:

strip_tags將刪除HTML標記,但不會刪除HTML實體(如&amp;),這些標記在截斷時仍可能導致問題。

要處理的實體爲好,可以使用html_entity_decode剝離標籤後的實體進行解碼,再修剪一下,終於重新編碼的實體htmlspecialchars

$text = "1 &lt; 2\n"; 
print $text; 
print htmlspecialchars(substr(html_entity_decode(strip_tags($text), ENT_QUOTES), 0, 3)); 

(注意使用ENT_QUOTES的實際轉換所有實體)

結果:

 
1 < 2 
1 < 

腳註:以上僅適用於可以解碼爲ISO-8859-1的實體。如果您需要支持國際字符,則應該已經使用UTF-8編碼的字符串,並且只需在html_entity_decode的調用中指定即可。