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(); //返回文本字符串
}
}