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,我贴上来给大家看一下:
<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;
相关文章推荐
- xslt生成xml出现特殊字符Â处理方法
- php插入含有特殊符号数据的处理方法
- php插入数据含有特殊符号的处理方法
- PHP对表单提交特殊字符的过滤和处理方法汇总
- 关于使用dom4j生成xml时特殊字符处理的解决方法
- window.showModalDialog参数传递中含有特殊字符的处理方法
- 1、class或都id中含有“.”,“#”等特殊字符 在我们的程序中可能会遇到id中还有“.”和“#”等特殊字符,如果按照普通方式处理就会出错,解决方法是用转义符转义。 在下面程序中: <div
- PHP中GET/POST方法参数传递空格+逗号等特殊字符处理办法
- php插入含有特殊符号数据的处理方法
- xml 的特殊字符的处理方法
- window.showModalDialog参数传递中含有特殊字符的处理方法
- PHP简单处理表单输入的特殊字符的方法
- PHP对表单提交特殊字符的过滤和处理方法汇总
- php中处理xml的文档方法
- 有关XML文档中特殊字符的处理
- PHP简单处理表单输入的特殊字符的方法
- php插入数据含有特殊符号的处理方法
- php处理字符串,判断是否含有特殊符号,非中文,数字,字符
- PHP对表单提交特殊字符的过滤和处理方法汇总
- 地址中含有汉字等其他字符时 的处理方法