1. java怎樣過濾危險字元,該怎麼解決
就WEB應用來說,所謂危險的字元一般就是兩種
一個是SQL注入,一個是HTML語法注回入
SQL注入主流的框架都可答以搞定,JDBC永遠都使用preparedstatement就可以防止所有的sql注入,關鍵是用戶輸入都要通過佔位符往裡放,就自動的替換掉了特殊字元了。hibernate等orm框架都會搞定這個問題
HTML語法注入是指用戶輸入的html代碼回顯出來,這樣如果不轉義就可以破壞頁面的結構或者注入腳本。所以現在的網站都不允許用戶直接輸入html代碼了,現在都是一些UBB標簽來完成一些效果。HTML主要最好的解決辦法是在回顯的時候進行轉義,所有的MVC框架或者展示層框架都有HTML轉義的支持,包括struts,spring,volicty等,注意觀察他們用於顯示的標簽
2. java中幾種解析html的工具
HTML分析是一個比較復雜的工作,Java世界主要有幾款比較方便的分析工具:
1.Jsoup
Jsoup是一個集強大和便利於一體的HTML解析工具。它方便的地方是,可以用於支持用jQuery中css selector的方式選取元素,這對於熟悉js的開發者來說基本沒有學習成本。
String content = "blabla";
Document doc = JSoup.parse(content);
Elements links = doc.select("a[href]");
Jsoup還支持白名單過濾機制,對於網站防止XSS攻擊也是很好的。
2.HtmlParser
HtmlParser的功能比較完備,也挺靈活,但談不上方便。這個項目很久沒有維護了,最新版本是2.1。HtmlParser的核心元素是Node,對應一個HTML標簽,支持getChildren()等樹狀遍歷方式。HtmlParser另外一個核心元素是NodeFilter,通過實現NodeFilter介面,可以對頁面元素進行篩選。這里有一篇HtmlParser的使用文章:使用 HttpClient 和 HtmlParser 實現簡易爬蟲。
3.Apache tika
tika是專為抽取而生的工具,還支持PDF、Zip甚至是JavaClass。使用tika分析HTML,需要自己定義一個抽取內容的Handler並繼承org.xml.sax.helpers.DefaultHandler,解析方式就是xml標準的方式。crawler4j中就使用了tika作為解析工具。SAX這種流式的解析方式對於分析大文件很有用,我個人倒是認為對於解析html意義不是很大。
4.HtmlCleaner與XPath
HtmlCleaner最大的優點是:支持XPath的方式選取元素。XPath是一門在XML中查找信息的語言,也可以用於抽取HTML元素。XPath與CSS Selector大部分功能都是重合的,但是CSS Selector專門針對HTML,寫法更簡潔,而XPath則是通用的標准,可以精確到屬性值。XPath有一定的學習成本,但是對經常需要編寫爬蟲的人來說,這點投入絕對是值得的。
3. 怎麼利用java格式化html
提供幾種選擇: 1)放入編輯器進行Format,如editplus、eclipse 2)自己編寫「元素格式化規則」代碼拿你的例子來說,需要在<html後面加入\n\t,可以用正則表達式進行匹配加替換
4. java正則表達式過濾html p標簽
用JavaScript方法如下,JAVA語言類似:
'你的HTML文本'.replace(/.+>(.+)<.+/,'$1')
5. java中如何過濾html的代碼
把需要寫入資料庫的字元通過下面的方法過濾然後內再寫入 public static String converthtml(String input) { if (input == null ||容 input.length() == 0) { return input; } StringBuffer buf = new StringBuffer(input.length() + 6); char ch = ' '; for (int i = 0; i < input.length(); i++) { ch = input.charAt(i); if (ch == '&') { buf.append("&"); } else if (ch == '<') { buf.append("<"); } else if (ch == '>') { buf.append(">"); } else if (ch == ' ') { buf.append(""); } else { buf.append(ch); } } return buf.toString(); }
希望採納
6. 用java字元串方法去除HTML代碼標簽的問題
可以通過replaceAll方法進行字元串替換,之後替換的內容用正則表達式來匹配。舉例
String ss="<div id='mini_nav_qq'><li><a target='_top' " +
專 "href='http:// lady.qq.com/emo/emotio.shtml'>情感</a></li><li>" +
"<a target='_top' href='http://lady.qq.com/beauty/beauty.shtml'>美容</a></li></div>";
String ss=ss.replaceAll("<(/?\S+)\s*?[^<]*?(/?)>","<$1$2>");//通過只保屬留"<「後面的字元串,之後刪除空格和後面的內容,快捷的實現去除操作(此方法通用於所有的標簽去除,只需要傳入不同的ss值)。
結果就是:<div><li><a>情感</a></li><li><a>美容</a></li></div>。
7. 怎麼清除所有的html標簽,(包括圖片、</p>、<span>等等所有標簽)只保留文字部分
這是我以前整理的,你可以先試試
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HTMLSpirit{
publicstatic String delHTMLTag(String htmlStr){
String
regEx_script="<script[^>]*?>[\\s\\S]*?<\\/script>"; //定義script的正則表達式
String
regEx_style="<style[^>]*?>[\\s\\S]*?<\\/style>"; //定義style的正則表達式
String
regEx_html="<[^>]+>"; //定義HTML標簽的正則表達式
Pattern
p_script=Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
Matcher m_script=p_script.matcher(htmlStr);
htmlStr=m_script.replaceAll(""); //過濾script標簽
Pattern
p_style=Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE);
Matcher
m_style=p_style.matcher(htmlStr);
htmlStr=m_style.replaceAll("");
//過濾style標簽
Pattern
p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
Matcher
m_html=p_html.matcher(htmlStr);
htmlStr=m_html.replaceAll(""); //過濾html標簽
return
htmlStr.trim(); //返迴文本字元串
}
}