做产品的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#语言
在学习和使用这些源码时,需要注意理解每一步的目的和实现方式,以便在自己的项目中灵活应用。 标签“PB XML”表明这是关于PowerBuilder处理XML数据的主题,如果你需要深入学习,可以查阅PowerBuilder的相关文档,...
需要注意的是,XML和JSON在结构上存在一些差异。XML支持命名空间、属性和自闭合标签,而JSON不支持这些特性。因此,在转换时,一些XML特定的元素可能无法直接映射到JSON。例如,XML属性需要被转换为JSON中的子对象,...
资源名称:使用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 是一个测试用例,包含了常用的方法,并有注解 ...
2. **编码问题**:在处理包含特殊字符的字符串时,还需要考虑字符编码的问题。例如,如果字符串中包含非英文字符,需要确保使用正确的编码方式(如UTF-8)。 3. **测试验证**:在使用了转义字符后,应该在不同设备和...
XML文件本身是以结构化的文本形式存在的,但有时我们需要将其转换为单一的字符串,这可能是因为要存储在数据库中,或者作为网络传输的数据。这可以通过编程语言中的XML处理库完成,如Python的xml.etree.ElementTree...
总之,XML的非法字符是XML解析和数据交换中需要特别注意的问题。正确使用转义字符是确保XML文档有效且无误的关键。在处理XML内容时,养成检查并转义非法字符的习惯,能够避免许多不必要的麻烦,提升开发效率和数据的...
c#生成XML字符串,简单易懂,中间过程不生成XML文件,不用担心多个操作的访问问题,返回结果为标准的XMl格式。
在XML(可扩展标记语言)中,特殊字符的处理是一项重要的技术细节,它直接关系到文档的正确解析和展示。由于XML是一种用于标记文本的元语言,它使用一系列的规则来定义数据结构和数据类型,因此,对于XML文档中可能...
在C++中,解析XML文档或XML字符串是常见的任务,特别是在需要与JavaScript或其他不支持指针的语言交互时。本文将详细介绍如何在Visual Studio 2010环境下利用Microsoft的MSXML库来处理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的生成。 ...
为了解决这一问题,我们引入了一款高效的工具——XmlNotepad v2.5,它能快速将大数据量的字符串转换成XML格式,大大提升了工作效率。 XmlNotepad是由Microsoft开发的一款轻量级的XML编辑器,它具有直观的用户界面和...
在Android开发过程中,为了实现应用的国际化或多语言支持,开发者通常会使用`strings.xml`文件来存储各种字符串资源。这些字符串资源不仅可以被直接引用显示在界面上,还可以通过格式化的方式动态填充变量值,从而...
在使用Struts开发WAP应用时,有几个关键知识点需要掌握: 1. **WML语言**:WML(Wireless Markup Language)是专为小屏幕和低带宽的无线设备设计的标记语言,类似于HTML。开发者需要熟悉WML语法,包括卡片(card)...