急,请教一个JAVA过滤HTML的问题。谢谢 这样做是不是很麻烦,要过滤到所有的html标签,我记得jstl标准标签库里面有个C:out标签,已经具有过滤的效果 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String result=test.throwOffHTMLAppointOutSide(str,"b,p");/**删除除指定标签param之外的所有html标签 * @param str 操作字符串 * @param param 需要保留的标签(保留多个用 ',' 分隔) * */ public static String throwOffHTMLAppointOutSide(String str,String param){ StringBuilder sb=new StringBuilder("<(?!\\s*/?\\s*(?:"); if (str == null || param==null ) { return ""; } else { String[] arrayParam=param.split(","); for(int i=0;i<arrayParam.length;i++){ sb.append(arrayParam[i]); if(i!=arrayParam.length-1){ sb.append("|"); } } sb.append("))[^>]+>"); } return str.replaceAll(sb.toString(), ""); } 这个好像有点小bug,没有把js过滤掉,呵呵,如果楼主想把js也过滤掉的话,可以在下面加一些代码:str=str.replaceAll("<script[^>]*>[^<]+</script>",""); <table id="tbl1" class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: medium none"> <tr> <td width="91" valign="top" style="width: 68.4pt; border: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm; background: #E0E0E0"> <p class="MsoNormal"><span style="font-family: 宋体">表名</span></td> </tr> </table> <script> alert(tbl1.outerHTML) var objTable=document.createElement("TABLE"),newTr,newTd; objTable.id="tbl1"; objTable.className="myclass"; for(var i=0;i<tbl1.rows.length;i++){ newTr=objTable.insertRow(); for(var j=0;j<tbl1.rows[i].cells.length;j++){ newTd=newTr.insertCell(); newTd.colSpan=(tbl1.rows[i].cells[j].colSpan==null?1:tbl1.rows[i].cells[j].colSpan); newTd.rowSpan=(tbl1.rows[i].cells[j].rowSpan==null?1:tbl1.rows[i].cells[j].rowSpan); newTd.innerText=tbl1.rows[i].cells[j].innerText; } } tbl1.outerHTML=objTable.outerHTML; alert(document.all('tbl1').outerHTML) </script> 关于引用模式的一个问题 关于Ibaits和Spring的整合问题 Spring rmi服务器启动问题 struts标签怎样能控制不生成tr,td? 客户端调用Ejb的流程 请问使用jxl如何设置一个sheet的背景图片呀!高分相赠! 能不能给我个例子,关于STRUTS配置连接池的。 请高手帮忙详细的说明一下rmi-iiop的编写过程。 请教大侠:我的hibernate编译时总时报这个错:problem parsing configuration/hibernate.cfg.xml 一些基础问题 Struts 的令牌是在哪里产生的? 高手!99吧!javatag
* @param str 操作字符串
* @param param 需要保留的标签(保留多个用 ',' 分隔)
* */
public static String throwOffHTMLAppointOutSide(String str,String param){
StringBuilder sb=new StringBuilder("<(?!\\s*/?\\s*(?:");
if (str == null || param==null )
{
return "";
}
else
{
String[] arrayParam=param.split(",");
for(int i=0;i<arrayParam.length;i++){
sb.append(arrayParam[i]);
if(i!=arrayParam.length-1){
sb.append("|");
}
}
sb.append("))[^>]+>");
}
return str.replaceAll(sb.toString(), "");
}
如果楼主想把js也过滤掉的话,可以在下面加一些代码:
str=str.replaceAll("<script[^>]*>[^<]+</script>","");
<tr>
<td width="91" valign="top" style="width: 68.4pt; border: 1.0pt solid windowtext; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; padding-bottom: 0cm; background: #E0E0E0">
<p class="MsoNormal"><span style="font-family: 宋体">表名</span></td>
</tr>
</table>
<script>
alert(tbl1.outerHTML)
var objTable=document.createElement("TABLE"),newTr,newTd;
objTable.id="tbl1";
objTable.className="myclass";
for(var i=0;i<tbl1.rows.length;i++){
newTr=objTable.insertRow();
for(var j=0;j<tbl1.rows[i].cells.length;j++){
newTd=newTr.insertCell();
newTd.colSpan=(tbl1.rows[i].cells[j].colSpan==null?1:tbl1.rows[i].cells[j].colSpan);
newTd.rowSpan=(tbl1.rows[i].cells[j].rowSpan==null?1:tbl1.rows[i].cells[j].rowSpan);
newTd.innerText=tbl1.rows[i].cells[j].innerText;
}
}
tbl1.outerHTML=objTable.outerHTML;
alert(document.all('tbl1').outerHTML)
</script>