1. 程式人生 > >java去除html程式碼中含有的html、js、css標籤,獲取文字內容

java去除html程式碼中含有的html、js、css標籤,獲取文字內容

       現在在做政府網站,網站裡有很多公開資訊和政務諮詢的新聞,現在需要做新聞的RSS訂閱功能,其中有一項是需要處理文章頁的內容。我們後臺新增編輯文章使用的是編輯器,文章內容會帶有很多html標籤和css樣式。RSS訂閱展示新聞列表,只需要展示一部分文章內容,這就需要處理文章頁的html程式碼,去除標籤,抓取文章文字內容,下面講一下怎麼做,主要是java的正則表示式和replaceAll()方法。
 
/**
 * 去除文章內容頁頁面程式碼裡的HTML標籤
 * Created by yanyl on 2018/6/4.
 */
public class DelTagsUtil {
    /**
     * 去除html程式碼中含有的標籤
     * @param htmlStr
     * @return
     */
    public static String delHtmlTags(String htmlStr) {
        //定義script的正則表示式,去除js可以防止注入
        String scriptRegex="<script[^>]*?>[\\s\\S]*?<\\/script>";
        //定義style的正則表示式,去除style樣式,防止css程式碼過多時只擷取到css樣式程式碼
        String styleRegex="<style[^>]*?>[\\s\\S]*?<\\/style>";
        //定義HTML標籤的正則表示式,去除標籤,只提取文字內容
        String htmlRegex="<[^>]+>";
        //定義空格,回車,換行符,製表符
        String spaceRegex = "\\s*|\t|\r|\n";

        // 過濾script標籤
        htmlStr = htmlStr.replaceAll(scriptRegex, "");
        // 過濾style標籤
        htmlStr = htmlStr.replaceAll(styleRegex, "");
        // 過濾html標籤
        htmlStr = htmlStr.replaceAll(htmlRegex, "");
        // 過濾空格等
        htmlStr = htmlStr.replaceAll(spaceRegex, "");
        return htmlStr.trim(); // 返回文字字串
    }
    /**
     * 獲取HTML程式碼裡的內容
     * @param htmlStr
     * @return
     */
    public static String getTextFromHtml(String htmlStr){
        //去除html標籤
        htmlStr = delHtmlTags(htmlStr);
        //去除空格" "
        htmlStr = htmlStr.replaceAll(" ","");
        return htmlStr;
    }

    public static void main(String[] args){
        String htmlStr= "<script type>var i=1; alert(i)</script><style> .font1{font-size:12px}</style><span>少年中國說。</span>紅日初升,其道大光。<h3>河出伏流,一瀉汪洋。</h3>潛龍騰淵, 鱗爪飛揚。乳 虎嘯  谷,百獸震惶。鷹隼試翼,風塵吸張。奇花初胎,矞矞皇皇。干將發硎,有作其芒。天戴其蒼,地履其黃。縱有千古,橫有" +
                "八荒。<a href=\"www.baidu.com\">前途似海,來日方長</a>。<h1>美哉我少年中國,與天不老!</h1><p>壯哉我中國少年,與國無疆!</p>";
        System.out.println(getTextFromHtml(htmlStr));
    }

}
main方法執行結果:
少年中國說。紅日初升,其道大光。河出伏流,一瀉汪洋。潛龍騰淵,鱗爪飛揚。乳虎嘯谷,百獸震惶。鷹隼試翼,風塵吸張。奇花初胎,矞矞皇皇。干將發硎,有作其芒。天戴其蒼,地履其黃。縱有千古,橫有八荒。前途似海,來日方長。美哉我少年中國,與天不老!壯哉我中國少年,與國無疆!