您的位置:首页 > 编程语言 > PHP开发

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

2010-04-13 18:49 801 查看
  本文首发代码天下,转载请注明来源代码天下,谢谢。

 

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

<Result value="true" message="Success!"> 
  <Item ID="79965" UserName="ming358" NickName="丅①站0寂寞" Grade="18" Repute="25" Sex="false" WinCount="577" TotalCount="654" ConsortiaName="次时代" Rename="false" ConsortiaRename="false" EscapeCount="0" IsFirst="109" /> 
</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过程中,忽略了对特殊符号的过滤,“”就是用户输入火星文产生的一个特殊符号。于是给官方联系,他们说这个接口时不能改的,牵扯到多个运营商唧唧歪歪说了一通,总之,接口时不能改的,自己想办法吧。我是那个郁闷啊,你传过来数据就是不对的,让我想办法改啊?生气没用,问题还得解决,于是只能想其它办法了:先用file_get_contents获取数据,把&符号替换为自己能识别的字符,例如{xml},然后用simplexml_load_string函数转化为数组,最后再把{xml}替换为&,ok,问题解决。代码如下:

$result = file_get_contents("http://www.code163.com/test.php?user=code163"); //获取xml  
echo $result;  
 
     $result = str_replace("&","{xml}",$result);  
     $string = <<<XML 
     $result  
XML;  
 
 
$xml = simplexml_load_string($string);  //载入  
 
//$xml = simplexml_load_file($str);   
$part = $xml->Item['NickName'];   
$part = str_replace("{xml}","&",$part);  
echo $part; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml php 文档 string file .net