【轉】java去除html代碼中含有的html、js、css標籤,獲取文字內容

【原文】:https://blog.csdn.net/u010882234/article/details/80585175

/**
 * 去除文章內容頁頁面代碼裏的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方法運行結果

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



忽略下面這兩段

修改之處,因爲實際中有些文本比較特殊,比如用<>括起來的文本: <敢教日月換新天>  ,上面的處理方式也會將這段當做是html標籤,然後給處理掉了,對這句正則稍作修改即可,所以有特殊需求的,可以根據具體的需求進行修改

//定義HTML標籤的正則表達式,去除標籤,只提取文字內容
 String htmlRegex="<[^>]+>";

改爲: String htmlRegex="<[^>]+/>";


最後貼一段代碼,供參考:

/**
     * 去除字符串中的html標籤.
     * <p>
     * <pre>
     * StringUtils.replaceHtml(null)  = ""
     * StringUtils.replaceHtml("")    = ""
     * StringUtils.replaceHtml("<td>content</td>") = "content"
     * StringUtils.replaceHtml("<>content</td>") = ""
     * </pre>
     *
     * @param html 要處理的字符串,可以爲 null
     * @return String 
     *
     */
    public static String replaceHtml(String html) {
        if (StringUtils.isBlank(html)) {
            return StringUtils.EMPTY;
        }
        String regEx = "<.+?>";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(html);
        String s = m.replaceAll(StringUtils.EMPTY);
        s = s.replaceAll("<[^>]*>", "");
        return s;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章