java过滤html
1. 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]");
- InputStream inputStream = null;
- HtmlParser htmlParser = new HtmlParser();
- htmlParser.parse(new ByteArrayInputStream(page.getContentData()),
- contentHandler, metadata, new ParseContext());
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有一定的学习成本,但是对经常需要编写爬虫的人来说,这点投入绝对是值得的。
2. 关于java,过滤html请求的Filter中跳转页面的问题。
一种解决方法 在response.sendRedirect()后面加上return。这种如果不行的话。
response.sendRedirect("error.jsp");error.jsp的完整路径加上。因为Fiter类是针对整个项目进行拦截的。
3. java 如何去除html中的一个指定标签和指定标签里的内容
java处理html指定标签最好用正则表达式。例如要去除html中所有的h1标签和类容就可以用下面的演示代码:
packagekonw.reg;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassRemoveTag
{
publicstaticvoidmain(String[]args)
{
FileReaderfr;
Stringcontent=null;
Stringregex="<[Hh]1>.*</[Hh]1>";
try
{
fr=newFileReader("tag.html");
BufferedReaderbr=newBufferedReader(fr);
Stringstr=null;
StringBuffersb=newStringBuffer();
while((str=br.readLine())!=null)
{
sb.append(str+" ");
}
content=sb.toString();
br.close();
}catch(FileNotFoundExceptione)
{
e.printStackTrace();
}catch(IOExceptione)
{
e.printStackTrace();
}
Patternpattern=Pattern.compile(regex);
Matchermatcher=pattern.matcher(content);
StringBuffersb1=newStringBuffer();
while(matcher.find())
{
sb1.append(matcher.replaceAll("")+" ");
}
try
{
FileWriterfw=newFileWriter("tag.html");
BufferedWriterbw=newBufferedWriter(fw);
fw.write(sb1.toString());
bw.close();
}catch(IOExceptione)
{
e.printStackTrace();
}
}
}
4. java爬取知乎答案的时候,如何去除其中的HTML标签
可以通过正则表达式去除html标签
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassHtmlUtil{
privatestaticfinalStringregEx_script="<script[^>]*?>[\s\S]*?<\/script>";//定义script的正则表达式
privatestaticfinalStringregEx_style="<style[^>]*?>[\s\S]*?<\/style>";//定义style的正则表达式
privatestaticfinalStringregEx_html="<[^>]+>";//定义HTML标签的正则表达式
privatestaticfinalStringregEx_space="\s*| | | ";//定义空格回车换行符
/**
*@paramhtmlStr
*@return
*删除Html标签
*/
publicstaticStringdelHTMLTag(StringhtmlStr){
Patternp_script=Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
Matcherm_script=p_script.matcher(htmlStr);
htmlStr=m_script.replaceAll("");//过滤script标签
Patternp_style=Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE);
Matcherm_style=p_style.matcher(htmlStr);
htmlStr=m_style.replaceAll("");//过滤style标签
Patternp_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
Matcherm_html=p_html.matcher(htmlStr);
htmlStr=m_html.replaceAll("");//过滤html标签
Patternp_space=Pattern.compile(regEx_space,Pattern.CASE_INSENSITIVE);
Matcherm_space=p_space.matcher(htmlStr);
htmlStr=m_space.replaceAll("");//过滤空格回车标签
returnhtmlStr.trim();//返回文本字符串
}
(StringhtmlStr){
htmlStr=delHTMLTag(htmlStr);
htmlStr=htmlStr.replaceAll("","");
htmlStr=htmlStr.substring(0,htmlStr.indexOf("。")+1);
returnhtmlStr;
}
publicstaticvoidmain(String[]args){
Stringstr="<divstyle='text-align:center;'>整治“四风”清弊除垢<br/><spanstyle='font-size:14px;'></span><spanstyle='font-size:18px;'>公司召开党的群众路线教育实践活动动员大会</span><br/></div>";
System.out.println(getTextFromHtml(str));
}
}
5. 在Java截取字符串的时候,如何过滤掉html标签
去除html标签
function
strip_tags($string,
$replace_with_space
=
true)
{
if
($replace_with_space)
{
return
preg_replace('!<[^>]*?>!',
'
',
$string);
}
else
{
return
strip_tags($string);
}
}
截取字符函数(匹配各种编码)
function
truncate($string,
$length
=
80,
$etc
=
'...',
$break_words
=
false,
$middle
=
false){
if
($length
==
0)
return
'';
if
(is_callable('mb_strlen'))
{
if
(mb_detect_encoding($string,
'utf-8,
iso-8859-1')
===
'utf-8')
{
//
$string
has
utf-8
encoding
if
(mb_strlen($string)
>
$length)
{
$length
-=
min($length,
mb_strlen($etc));
if
(!$break_words
&&
!$middle)
{
$string
=
preg_replace('/\s+?(\s+)?$/u',
'',
mb_substr($string,
0,
$length
+
1));
}
if
(!$middle)
{
return
mb_substr($string,
0,
$length)
.
$etc;
}
else
{
return
mb_substr($string,
0,
$length
/
2)
.
$etc
.
mb_substr($string,
-
$length
/
2);
}
}
else
{
return
$string;
}
}
}
//
$string
has
no
utf-8
encoding
if
(strlen($string)
>
$length)
{
$length
-=
min($length,
strlen($etc));
if
(!$break_words
&&
!$middle)
{
$string
=
preg_replace('/\s+?(\s+)?$/',
'',
substr($string,
0,
$length
+
1));
}
if
(!$middle)
{
return
substr($string,
0,
$length)
.
$etc;
}
else
{
return
substr($string,
0,
$length
/
2)
.
$etc
.
substr($string,
-
$length
/
2);
}
}
else
{
return
$string;
}
}
综合就是
$arc=strip_tags($arc);
6. java正则表达式过滤html p标签
用JavaScript方法如下,JAVA语言类似:
'你的HTML文本'.replace(/.+>(.+)<.+/,'$1')
7. 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(); }
希望采纳
8. java过滤sql关键字的正则替换掉
java过滤sql关键字的正则替换掉方法如下:
可以在C#中这样做:Regexregex = newRegex(@"]*>[^");
stringcleanedHtml = regex.Replace(html, "");
可是我并不想再写个循环去遍历每条记录,然后保存每条记录,我想在数据库中一步到位,而sql只提供了简单的replace函数,这个函数明显不能达到咱的要求,那就去写一个自定义函数吧。
函数源代码如下:CREATE functiondbo.regexReplace
(@source ntext,--原字符串@regexp varchar(1000),--正则表达式@replace varchar(1000),--替换值@globalReplace bit=1,--是否是全局替换@ignoreCase bit=0 --是否忽略大小写)returnS varchar(1000)AS
begin
declare@hr intege
declare@objRegExp integer
declare@result varchar(5000)exec@hr =sp_OACreate'VBScript.RegExp',@objRegExp OUTPUT
IF@hr <>0 begin
exec@hr =sp_OADestroy@objRegExp
returnnullend
exec@hr =sp_OASetProperty@objRegExp,'Pattern',@regexp
IF@hr <>0 begin
exec@hr =sp_OADestroy@objRegExp
returnnullend
exec@hr =sp_OASetProperty@objRegExp,'Global',@globalReplace
IF@hr <>0 begin
exec@hr =sp_OADestroy@objRegExp
returnnullend
exec@hr =sp_OASetProperty@objRegExp,'IgnoreCase',@ignoreCase
IF@hr <>0 begin
exec@hr =sp_OADestroy@objRegExp
returnnullend
exec@hr =sp_OAMethod@objRegExp,'Replace',@result OUTPUT,@source,@replace
IF@hr <>0 begin
exec@hr =sp_OADestroy@objRegExp
returnnullend
exec@hr =sp_OADestroy@objRegExp
IF@hr <>0 begin
returnnullend
return@result
end
需要注意的是,即使写好了这个函数,也并不能马上使用。执行这个函数时可能会出现以下的错误:Msg 15281, Level 16, State 1, Line 1
SQL Server blocked access to procere 'sys.sp_OACreate' of component 'Ole Automation Proceres' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ole Automation Proceres' by using sp_configure. For more information about enabling 'Ole Automation Proceres', see "Surface Area Configuration" in SQL Server Books Online.
这是因为未开启Ole Automation Proceres选项,MSDN中的Ole Automation Proceres选项。执行下面的语句开启这个选项:sp_configure'show advanced options',1;GO
RECONFIGURE;GOsp_configure'Ole Automation Proceres',1;GO
RECONFIGURE;GO
所有的准备工作都已经做好,那就试验一下吧。
Example1:忽略大小写并替换selectdbo.regexReplace(',']*>[^','',1,1)
Example2: 使用贪婪匹配
html代码:
Also Available - Smith & Hogan: Criminal Law Cases & Materials 10th ed
There is, as ever, detailed analysis of the many recent case developments, in particular,
a revision of the chapter dealing with secondary liability and joint enterprise.
调用代码:selectdbo.regexReplace(html,']*>(.|
)*?','',1,1)
Example3:去除html标签selectdbo.regexReplace('
Key Contact:
Mr Jack, Zhou
General Manager
Mr A, Ho
Marketing Director
Overseas Sales
MsWinny, Luo
Sales Manager
Overseas Sales',']*>','',1,0)
Example4:数据库字段值替换updateBooks。
9. javaweb,给HTML文件加上过滤器以后,HTML显示乱码。
那是你的浏览器不识别Content-Type,采用了默认的GBK/GB2312编码显示,这个可以在打开页面“右键-编码”看到;meta最好给一个结束符,即:<meta http-equiv="content-type" content="text/html; charset=utf-8" />
10. java 利用jsoup 如何去除一段代码中的所有html标签,只留纯文本
使用正则表达式去匹配<>这种字符,然后删掉!