xml文档里含有特殊字符时的处理方法(php)

  本文首发代码天下,转载请注明来源代码天下,谢谢。

 

  今天上班时遇到一个问题,游戏官反应一个用户充不了值。充不了值一般为用户角色不正确,我仔细检查发现该用户角色有点异常,因为对方返回角色是xml,我贴上来给大家看一下:

 
 
  1. <Result value="true" message="Success!"> 
  2.   <Item ID="79965" UserName="ming358" NickName="丅①站0&#x1;寂寞" Grade="18" Repute="25" Sex="false" WinCount="577" TotalCount="654" ConsortiaName="次时代" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="109" /> 
  3. </Result> 

原来,这个xml里有&符号,这个&符号在.NET里是可以正常读取的,但是在php里是不行的,php里如果加载的话,会发生以下错误:

Warning: DOMDocument::load() [function.DOMDocument-load]: xmlParseCharRef: invalid xmlChar value 1 in file:///E%3A/phpsite/web2.7k7k.com/games/test.xml, line: 4 in E:/phpsite/web2.7k7k.com/read_xml.php on line 5

因为官方程序是.net,在返回xml过程中,忽略了对特殊符号的过滤,“&#x1;”就是用户输入火星文产生的一个特殊符号。于是给官方联系,他们说这个接口时不能改的,牵扯到多个运营商唧唧歪歪说了一通,总之,接口时不能改的,自己想办法吧。我是那个郁闷啊,你传过来数据就是不对的,让我想办法改啊?生气没用,问题还得解决,于是只能想其它办法了:先用file_get_contents获取数据,把&符号替换为自己能识别的字符,例如{xml},然后用simplexml_load_string函数转化为数组,最后再把{xml}替换为&,ok,问题解决。代码如下:

 
 
  1. $result = file_get_contents("http://www.code163.com/test.php?user=code163"); //获取xml  
  2. echo $result;  
  3.  
  4.      $result = str_replace("&","{xml}",$result);  
  5.      $string = <<<XML 
  6.      $result  
  7. XML;  
  8.  
  9.  
  10. $xml = simplexml_load_string($string);  //载入  
  11.  
  12. //$xml = simplexml_load_file($str);   
  13. $part = $xml->Item['NickName'];   
  14. $part = str_replace("{xml}","&",$part);  
  15. echo $part; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值