这几天在用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 禁止对任何字符进行转义处理。
标签:XML,FLEX,xmlSpecialCharsFilter,WebService,function,AIR,amp,转义 From: https://blog.51cto.com/u_16129500/6354876