簡體   English   中英

使用StringTokenizer刪除html標簽

[英]remove html tags with using StringTokenizer

這是我的字符串:

String str = "<pre><font size="5"><strong><u>LVI . The Day of Battle</u></strong></font>        
<font
size="4"><strong>";

我想使用StringTokenizer刪除字符串中的所有html標簽。 但是我不明白如何在這種情況下使用StringTokenizer。 因為當我使用str.replaceAll("\\\\<.*?>","") ,刪除所有標簽效率不高,因為某些標簽將位於字符串的下一行,如上面的字符串所示。 但是我想在<>之間的所有情況下都這樣做。 我該怎么做? (我想使用StringTokenizer實現它)。 謝謝..

通常,除了HTML解析庫之外,您不應使用其他任何內容解析HTML。 編寫您自己的解析器會帶來安全風險,並使您的應用程序容易受到攻擊的威脅,例如跨站點腳本和各種其他錯誤。 再說一遍:不要使用正則表達式或簡單的標記器來解析HTML。 如果您只有一小部分已知的HTML數據輸入,並且將代碼用於該數據,則可能是該規則的例外。 在這種情況下,您可以並且應該驗證您的代碼對每個輸入所做的正確操作。

也就是說,您原來的正則表達式非常接近。 點通配符匹配除換行符之外的所有內容,因此,如果我們向您的正則表達式中添加除點通配符之外還包含換行符的可能性,我們將在測試字符串上獲得肯定的結果。

String result = str.replaceAll("<(.|\r|\n|\f)*?>","");

請勿在未知輸入上使用此代碼! 請勿在生產中使用它! 它不是解析HTML的安全或正確方法。

嘗試單獨使用正則表達式或StringTokenizer處理HTML是很痛苦的。

在您繼續之前, 此答案是必讀的。

如果您的HTML文件很簡單,則可以免除以下內容:刪除換行符,然后應用正則表達式,然后重新格式化HTML-或嘗試使用多行正則表達式。

但是,您應該真正考慮使用適當的HTML解析器。 看到這個問題 (可能還有很多其他問題...)

最好使用HTML解析器庫而不是StringTokenizer。 請看下面的演示:

  1. http://jsoup.org/download下載jsoup-1.6.1.jar核心庫。
  2. 將此庫添加到您的類路徑。
  3. 隨心所欲地播放HTML。 下面的示例是將HTML內容轉換為文本格式的代碼:

    導入org.jsoup.Jsoup;

    公共類HtmlParser {

     public static String removeAllHtml(String htmlContent) { return Jsoup.parse(htmlContent).text(); } public static void main(String[] args) { String htmlContent = "<pre><font size=\\"5\\"><strong><u>LVI . The Day of Battle</u></strong></font><fontsize=\\"4\\"><strong>"; System.out.println(removeAllHtml(htmlContent)); } 

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM