加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml 标准字符过滤

发布时间:2020-12-16 09:26:31 所属栏目:百科 来源:网络整理
导读:今天在代码里面看见一串很奇怪的判断语句 if (c 0x9 || c 0x9 c 0xA || c 0xA c 0xD || c 0xD c 0x20 || c 0xD7FF c 0xE000 || c 0xFFFD) 于是用 0xE000和 0xFFFD 搜索了一下,发现原来xml还有这些限制。 根据xml spec http://www.w3.org/TR/xml/#charsets x

今天在代码里面看见一串很奇怪的判断语句

if (c < 0x9 || c > 0x9 && c < 0xA || c > 0xA && c < 0xD || c > 0xD && c
< 0x20 || c > 0xD7FF && c < 0xE000 || c > 0xFFFD)

于是用0xE000和0xFFFD 搜索了一下,发现原来xml还有这些限制。

根据xml spec

http://www.w3.org/TR/xml/#charsets

xml合法的字符范围是

[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

然后有网上各种人遇到的问题

因为字节数组中存在 Unicode: 0x0,而这个字节在Xml中被认为是非法字符。对于一些经过编码或加、解密的字符串中,很容易会出现这个 0x0,特别是在加、解密中,经常会涉及到字符填充,而填充物通常是 0x0,对于0x00-0x20都会引起一定的问题,又因为这些字符不可见,因此用通常的编辑器进行编辑的时候找不到问题所在。

xml中需要过滤的字符分为两类:

一类是不允许出现在xml中的字符,这些字符不在xml的定义范围之内;

另一类是xml自身要使用的字符,如果内容中有这些字符则需被替换成别的字符。

第一类字符:

  对于第一类字符,我们可以通过W3C的XML文档来查看都有哪些字符不被允许出现在xml文档中。

  XML允许的字符范围是“#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]”。因此我们可以把这个范围之外的字符过滤掉。

第二类字符:

  对于第二类字符一共有5个,如下:

  字符 HTML字符 字符编码

  和(and) & &amp; &#38;

  单引号 ’ &apos; &#39;

  双引号 ” &quot; &#34;

  大于号 > &gt; &#62;

  小于号 < &lt; &#60;


还有
解决openfire中发送某些特殊字符会断开xmpp连接的问题

以及emoji问题http://blog.csdn.net/u014542833/article/details/22954893


这只能用一个非严格标准的xml解析器,或者用cdata包超出范围的字符了?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读