`
langyu
  • 浏览: 884163 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

XML中特殊字符过滤(含Java代码)

阅读更多
        在XML规范中,不支持ASCII前31个字符中的相当多控制符号,所以在组装XML时需过滤这些特殊字符,以免引起解析问题。对于这些特殊字符,常见的异常如:
引用
Character reference "&#12" is an invalid XML character.

这里的"&#12表示是ASCII码的第几个控制字符


        同时,'&'(实体引用的开始)和'<'(控制符的开始)作为XML的标准控制字符必须不能出现在正常内容中,如果出现的话,需要转义。XML提供CDATA结构段用来指示XML解析器不要对CDATA段中的数据做处理。但如果在CDATA段中包含CDATA段的关闭符']]>'的话,还是会出现解析问题。

     正常CDATA段示例
引用
CDStart    ::=   '<![CDATA['
CData       ::=   (Char* - (Char* ']]>' Char*))
CDEnd     ::=   ']]>'


        用类似的代码解决这类烦人问题

/**
	 * @see http://www.w3.org/TR/2004/REC-xml-20040204/#charsets
	 * 		All supported characters
	 * @param data 
	 * 			content in each field 
	 * @return 
	 * 			regular content is filtered from illegal XML char
	 */
	public static String checkXmlChar(String data) {
		StringBuffer appender = new StringBuffer("");
		
	    if (StringUtils.isNotBlank(data)) {
	    	appender = new StringBuffer(data.length());
	    	
	    	for (int i = 0; i < data.length(); i++) {
		        char ch = data.charAt(i);
		        if ((ch == 0x9) || (ch == 0xA) || (ch == 0xD)
		                || ((ch >= 0x20) && (ch <= 0xD7FF))
		                || ((ch >= 0xE000) && (ch <= 0xFFFD))
		                || ((ch >= 0x10000) && (ch <= 0x10FFFF)))
		        	appender.append(ch);
		    }
	    }
	    
	    String result = appender.toString();
	    
	    return result.replaceAll("]]>", "");
	}

3
0
分享到:
评论

相关推荐

    sql注入Java过滤器

    配置在web.xml中,可以防止SQL注入,可以自己定义一些需要过滤的特殊字符

    中文字符过滤器

    解决编码传参中文乱码问题,附有.java和web.xml配置文件关键代码

    JAVA上百实例源码以及开源项目源代码

    Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有...

    JAVA上百实例源码以及开源项目

    Java圆形按钮实例代码,含注释 两个目标文件,自绘button。 Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟  用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有...

    filter对request请求拦截,对请求参数进行修改

    对request请求进行拦截,对请求...-- 特殊字符过滤 --&gt; &lt;filter-name&gt;sqlFilter &lt;filter-class&gt;weixin.idea.waiting.cq.controller.JsFilter &lt;filter-name&gt;sqlFilter &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    Java防止xss攻击附相关文件下载

    首先说一下思路,防止这种类似于注入攻击,就是使用拦截器(Filter)处理特殊字符或过滤特殊字符 今天介绍一个方法,利用覆盖Servlet的getParameter方法达到处理特殊字符的目的来解决(防止)Xss攻击 web.xml,需要的...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    java开源包8

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    一个简单的JAVA字符集过滤器实现

    代码如下:package dw05prj.util.filter; import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.... /*页面字符集过滤流*/ /* 在web.xml中配

    java jdk实列宝典 光盘源代码

    java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    java开源包10

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    java开源包11

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包6

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包4

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包9

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

Global site tag (gtag.js) - Google Analytics