做产品的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#语言
纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...
2. **编码问题**:在处理包含特殊字符的字符串时,还需要考虑字符编码的问题。例如,如果字符串中包含非英文字符,需要确保使用正确的编码方式(如UTF-8)。 3. **测试验证**:在使用了转义字符后,应该在不同设备和...
XML文件本身是以结构化的文本形式存在的,但有时我们需要将其转换为单一的字符串,这可能是因为要存储在数据库中,或者作为网络传输的数据。这可以通过编程语言中的XML处理库完成,如Python的xml.etree.ElementTree...
总之,XML的非法字符是XML解析和数据交换中需要特别注意的问题。正确使用转义字符是确保XML文档有效且无误的关键。在处理XML内容时,养成检查并转义非法字符的习惯,能够避免许多不必要的麻烦,提升开发效率和数据的...
字符串转化为XML文件 本文将详细介绍字符串转化为XML文件的知识点,包括XML文件的基本结构、StringBuilder类的使用、XML文档对象模型(DOM)、XML文件的保存等。 XML文件的基本结构 XML(Extensible Markup ...
c#生成XML字符串,简单易懂,中间过程不生成XML文件,不用担心多个操作的访问问题,返回结果为标准的XMl格式。
在XML(可扩展标记语言)中,特殊字符的处理是一项重要的技术细节,它直接关系到文档的正确解析和展示。由于XML是一种用于标记文本的元语言,它使用一系列的规则来定义数据结构和数据类型,因此,对于XML文档中可能...
Js+XML 操作应用:JS解析XML文件和XML字符串 支付接口常用,亲测可用!
首先,你需要创建一个`JAXBContext`实例,然后使用`Marshaller`对象将`Map`对象写入XML字符串。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public String mapToXml(Map, ...
- **jQuery**:jQuery提供了方便的`.parseXML()`函数,简化了XML解析,但同样需要注意浏览器兼容性问题。 - **Ajax请求**:通过XMLHttpRequest或fetch API,可以获取XML文件并自动进行解码,然后使用DOMParser解析...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、Web服务、配置文件等领域。本文将深入探讨XML与JavaBean之间的转换、XML标签的大小写规则、XML特殊符号的处理以及CDATA的生成。 ...
在Android开发过程中,为了实现应用的国际化或多语言支持,开发者通常会使用`strings.xml`文件来存储各种字符串资源。这些字符串资源不仅可以被直接引用显示在界面上,还可以通过格式化的方式动态填充变量值,从而...
下面将详细介绍这些解析器的工作原理以及它们在生成XML并返回XML字符串形式时的应用。 1. DOM (Document Object Model) DOM是一种基于树形结构的XML解析模型,它将整个XML文档加载到内存中,形成一个完整的文档对象...
在Java开发中,XML(可扩展标记语言)是一种常见的数据交换格式,用于存储和传输结构化数据。JDK(Java Development Kit)自1.6版本起就提供了处理...通过练习和实际应用,可以更好地理解和运用JDK提供的XML处理能力。
当我们处理XML文档时,有时需要将其转换为字符串格式,以便于存储、传输或者进一步处理。标题和描述提及的"XML文档转换成字符串"就是这样一个需求。下面我们将详细探讨如何实现这个功能。 首先,我们要理解XML文档...
标题和描述所提及的问题是关于如何在Mapper.xml文件中处理字符串形式的参数,这些参数由逗号分隔,并在`AND`语句中拼接`OR`子句来实现动态查询。这种场景在处理用户多选过滤条件时非常常见,比如在一个搜索框中,...