0
点赞
收藏
分享

微信扫一扫

FLEX AIR实践—FLEX AIR XML Encode Bug


 这几天在用AIR程序通过WebService进行数据传输时发现了以下问题:

用WebService传输‘A&B’内容到目的地,再从目的地将数据通过WebService获取到本地,结果数据变成了'A&B';
于是开始进行以下测试:
将'A&B'替换成'A&B'——>获取结果为'A&B'
测试了其他转义字符也得到了同样的结果(&均被转化成了&)

 

而同样的测试在Flex Application(非AIR工程)中进行得到的结果就是'A&B'

查了好久,最后找到了AIR BUG:
在WebService.as中有以下代码:

/**
     * Custom function to be used to escape XML special characters before
     * encoding any simple content. Valid for all operations on the web
     * service unless specifically overwritten on the operation level.
     * If none is provided, the defaults to whatever is set by the particular
     * implementation of IXMLEncoder
     */
    public function get xmlSpecialCharsFilter():Function
    {
        return _xmlSpecialCharsFilter;
    }

    public function set xmlSpecialCharsFilter(func:Function):void
    {
        _xmlSpecialCharsFilter = func;
    }

 

原来AIR在WebService向外传输数据前就对传输内容中的特殊字符做了转义处理,将'&'转义成了'&'
于是在传输过程中HTTP协议又对其进行了转义处理'&'就变成了'&'

官方资料:
http://bugs.adobe.com/jira/browse/SDK-18326
处理方案:
在执行WebService所调用的方法前添加以下内容:

new WebService() ws.xmlSpecialCharsFilter= function(value:Object):String { return value.toString(); }

 

通过重写xmlSpecialCharsFilter 禁止对任何字符进行转义处理。

举报

相关推荐

0 条评论