做产品的bug修复中发现如果邮件主题出现一些特殊字符,会导致手机模拟器无法打开网页,xml无法被正常解析。
第一步分析以为是转义字符引起的xml标签不对称,对邮件主题加CDATA标签,重启服务后,问题仍然出现。
经过查找资料, 发现是XML文件中包含了一些不允许在XML中使用的字符(控制符). XML规范中规定了允许的字符范围(http://www.w3.org/TR/REC-xml#dt-character):
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
所以这类以xml为内容载体的wap内容格式,所有显示内容都需隔绝除上述范围的编码值,否则会产生严重的功能障碍。在邮件主题和内容的标签加上如下处理:
/**
* 使用空格替代非法字符.
*
* @param text
* @return
*/
public static String replaceInvaldateCharacter(String text)
{
if (text != null) {
char[] data = text.toCharArray();
for (int i = 0; i < data.length; i++) {
if(!isXMLCharacter( data[i])){
data[i] = 0x20;
}
}
return new String(data);
}
return text;
}
/**
* 检查字符是否为合法的xml字符。
* XML规范中规定了允许的字符范围(http://www.w3.org/TR/REC-xml#dt-character):
* Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
*
* @param c
* @return
*/
private static boolean isXMLCharacter(int c)
{
if (c <= 0xD7FF) {
if (c >= 0x20) {
return true;
}
else {
return c == '\n' || c == '\r' || c == '\t';
}
}
return (c>=0xE000 && c<= 0xFFFD) || (c>=0x10000 && c<= 0x10FFFF);
}
经过非法字符的替换处理后,包含非法XML字符的邮件可以正常阅读。
综上所述,对于wml出现的内容,需要做以下处理:
1、 替换非法的XML字符
2、对于可能出现’<’,’/’,’&’,’>’等字符的内容需要进行转义字符替换,或者使用CDATA包起来
分享到:
相关推荐
xml中的非法字符问题
在XML配置文件中,如Spring框架的bean配置,或者在XML文档存储用户输入时,都需要特别注意特殊字符的处理,以避免解析错误或安全问题,如跨站脚本攻击(XSS)。 总结来说,理解并正确处理XML特殊字符是XML编程中的...
在IT领域,特别是Java开发中,处理XML数据是一项常见的任务。...这对于在Java应用程序中处理动态生成或外部提供的XML数据非常有用。掌握这一技能,开发者能够更有效地集成XML数据处理功能到自己的软件项目中。
生成xml格式字符串、序列化XML 对象=》XML文本、反序列化 XML文本=》对象 等方法,对象和xml之间的相互转换、datatable方式转换为xml文本的工具类方法 C#语言
需要注意的是,XML和JSON在结构上存在一些差异。XML支持命名空间、属性和自闭合标签,而JSON不支持这些特性。因此,在转换时,一些XML特定的元素可能无法直接映射到JSON。例如,XML属性需要被转换为JSON中的子对象,...
在学习和使用这些源码时,需要注意理解每一步的目的和实现方式,以便在自己的项目中灵活应用。 标签“PB XML”表明这是关于PowerBuilder处理XML数据的主题,如果你需要深入学习,可以查阅PowerBuilder的相关文档,...
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...
XML文件本身是以结构化的文本形式存在的,但有时我们需要将其转换为单一的字符串,这可能是因为要存储在数据库中,或者作为网络传输的数据。这可以通过编程语言中的XML处理库完成,如Python的xml.etree.ElementTree...
字符串转化为XML文件 本文将详细介绍字符串转化为XML文件的知识点,包括XML文件的基本结构、StringBuilder类的使用、XML文档对象模型(DOM)、XML文件的保存等。 XML文件的基本结构 XML(Extensible Markup ...
c#生成XML字符串,简单易懂,中间过程不生成XML文件,不用担心多个操作的访问问题,返回结果为标准的XMl格式。
在XML(可扩展标记语言)中,特殊字符的处理是一项重要的技术细节,它直接关系到文档的正确解析和展示。由于XML是一种用于标记文本的元语言,它使用一系列的规则来定义数据结构和数据类型,因此,对于XML文档中可能...
Js+XML 操作应用:JS解析XML文件和XML字符串 支付接口常用,亲测可用!
- **jQuery**:jQuery提供了方便的`.parseXML()`函数,简化了XML解析,但同样需要注意浏览器兼容性问题。 - **Ajax请求**:通过XMLHttpRequest或fetch API,可以获取XML文件并自动进行解码,然后使用DOMParser解析...
首先,你需要创建一个`JAXBContext`实例,然后使用`Marshaller`对象将`Map`对象写入XML字符串。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public String mapToXml(Map, ...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、Web服务、配置文件等领域。本文将深入探讨XML与JavaBean之间的转换、XML标签的大小写规则、XML特殊符号的处理以及CDATA的生成。 ...
在Android开发过程中,为了实现应用的国际化或多语言支持,开发者通常会使用`strings.xml`文件来存储各种字符串资源。这些字符串资源不仅可以被直接引用显示在界面上,还可以通过格式化的方式动态填充变量值,从而...
下面将详细介绍这些解析器的工作原理以及它们在生成XML并返回XML字符串形式时的应用。 1. DOM (Document Object Model) DOM是一种基于树形结构的XML解析模型,它将整个XML文档加载到内存中,形成一个完整的文档对象...
在Socket编程中,需要处理网络中断、超时等问题。此外,XML数据传输应考虑安全性,如使用SSL/TLS加密,防止数据被窃取或篡改。 总结,XML传输结合Socket编程可以实现高效、自定义的网络通信。理解XML的结构和解析...
"SAX解析String类型XML字符串"就是一种高效且节省内存的方式去解析XML数据,特别是当XML文件较大时,SAX解析器优于DOM解析器,因为它不需要一次性加载整个XML到内存中。下面我们将深入探讨这一主题。 首先,XML...