2014-04-28 45 views
0

在我的Java Web應用程序中,我創建了長HTML文本的摘要文本。在截斷過程中,字符串中的HTML片段經常中斷,從而產生帶有無效&碎片的HTML字符串。像這樣的例子HTML字符串:如何截斷HTML字符串以刪除損壞的無效HTML片段?

Visit this link <img src="htt 

是否有任何Java庫來處理這個更好,所以,這樣的破片段如上避免?

或者我可以讓這個被包含在HTML頁面&莫名其妙地應對這種使用客戶端代碼?

+0

你能檢查一下NekoHtml庫是否可以幫助你? http://nekohtml.sourceforge.net/ – Hirak

+0

謝謝你會檢查出來.. –

回答

0

因爲瀏覽器通常能夠應付幾乎所有你送入它的任何垃圾(如果它不是XHTML ...),如果實際與輸入發生的唯一的事(假設它是任何一種有效的HTML )正在被切片,那麼你唯一需要擔心的是實際上擺脫無效的開標籤;你將無法區分標籤的「結尾」,因爲它們本身並不是什麼特別的。我只是把我生成的一個片段從最後解析出來;如果我遇到流浪'<',我會擺脫它後面的一切。同樣,我會跟蹤上次打開的標籤 - 如果在沒有關閉該標籤後下一個關閉標籤,則可能是關閉標籤已經出來,所以我會插入它。

這仍然會產生很多垃圾,但至少會解決一些基本問題。

一個更好的辦法是管理打開/關閉標籤的堆棧和生成/刪除所需/破/不必要的人,因爲他們出現。因爲HTML標籤是一個合適的解決方案,所以它不是有效的,因爲它是從HTML 4開始的,因此它是'012'''''''' 。

一個更好的方法是將拼接解析它作爲SGML/HTML/XML第一後的文件(取決於確切的HTML文檔類型) - 那麼你可以只取出節點,而不損壞結構。

請注意,如果沒有提供用於生成此「亂碼」內容的確切算法,您無法真正知道標記是否正確。

0

我用owasp-java-html-sanitizer修復這些破損碎片產生從Java安全的HTML標記。

PolicyFactory html_sanitize_policy = Sanitizers.LINKS.and(Sanitizers.IMAGES); 
String safeHTML = html_sanitize_policy.sanitize(htmlString); 

這似乎是最簡單的,我碰到的所有解決方案。