版主,又来求助了。。。这回事是网页返回的XML数据,我不知道为什么不能用simplexml读取,var_dump显示false
echo '#########################'.'</br></br>'; var_dump($xml); echo '#########################'; echo '<br>'.'<br>'.'<br>'.$xml->xsm->nickname;
如果用上面这段直接打印是这样子的:
echo '#########################'.'</br></br>'; var_dump(simplexml_load_string($xml); echo '#########################'; echo '<br>'.'<br>'.'<br>'.$xml->xsm->nickname;
用这段代码打印就会显示bool(false)
4本文¥来源gao!%daima.com搞$代*!码$网9
搞代gaodaima码
求解决
回复讨论(解决方案)
$xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));
$xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));
//$xml='<!---ecms -ecms -ecms ?xml version="1.0" encoding="gbk"?-->'; $xml = preg_replace('/!--\?|--/','', $xml); var_dump($xml);
这样我试了,单独一行可以正匹配,但是在这段代码里无效。在网页元素查看器里看到返回的数值还是有注释符
你为什么要自作聪明呢
$xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));
之前我不懂那个是xml里的注释,现在明白了,所以想到了另一种方法,可是还是失败了,能告诉我下原因吗?
$xml = ''.$xml; var_dump(simplexml_load_string($xml));
我是用字符串运算符加了一行xml的文件标记,可是用simplexml_load_string的时候依然显示失败
还是那话,你为什么要自作聪明呢
你为什么要自作聪明呢
你给我的代码贴上去也是无法载入…
那是因为你不给我你的数据
还是那话,你为什么要自作聪明呢
这是直接复制给我的代码贴上去运行后的结果…
依然得去掉simplexml载入的语句才能dump出来
你光截图是没有用的!
你怎么知道其中没有不可打印的字符呢?
那是因为你不给我你的数据
<?xml version="1.0" encoding="gbk"?>114wedc2116116011062014v=20140806000211620001140748822873510116226011162288228735c6959b4eacf7b2f
这是我用fwrite写入的$xml值
里面没有注释掉文件标记,可不知道问什么不能载入
你光截图是没有用的!
你怎么知道其中没有不可打印的字符呢?
在IE下查看会显示
结束标记 ‘xsm’ 与开始标记 ‘comShort’ 不匹配。
SimpleXMLElement Object( [@attributes] => Array ( [code] => 0000 [msg] => 验证成功abc [trans_time] => 20140808162708 ) [userId] => 114 [nickName] => wedc [userType] => 2 [comId] => 116 [saledptId] => 11601 [refId] => 1062014 [comName] => SimpleXMLElement Object ( ) [domainUrl] => v=2014080600 [comType] => 02 [comShort] => SimpleXMLElement Object ( ) [parentComId] => 11620001 [expirationTime] => 1407488228735 [planText] => 10116226011162288228735 [signatureValue] => c6959b4eacf7b2f)
这不是可以吗?
你截图中显示字符串长度为 984 字节,而你贴出的只有 509 字节。
还有四百多字节到哪里去了?
你光截图是没有用的!
你怎么知道其中没有不可打印的字符呢?
版主,我知道,原因是里面有中文所以不能载入,这个如何才能解决?因为数据不是我自己的所以我也没法改
SimpleXMLElement Object( [@attributes] => Array ( [code] => 0000 [msg] => 验证成功abc [trans_time] => 20140808162708 ) [userId] => 114 [nickName] => wedc [userType] => 2 [comId] => 116 [saledptId] => 11601 [refId] => 1062014 [comName] => SimpleXMLElement Object ( ) [domainUrl] => v=2014080600 [comType] => 02 [comShort] => SimpleXMLElement Object ( ) [parentComId] => 11620001 [expirationTime] => 1407488228735 [planText] => 10116226011162288228735 [signatureValue] => c6959b4eacf7b2f)
这不是可以吗?
你截图中显示字符串长度为 984 字节,而你贴出的只有 509 字节。
还有四百多字节到哪里去了?
还有400字节是一长串字符串太长我就删了半截
谢谢你,我发现原因了,是因为PHP用utf8编码的,而获取的xml数据时gbk的,把文件里的gbk改成utf8就解决了
SimpleXMLElement Object( [@attributes] => Array ( [code] => 0000 [msg] => 验证成功abc [trans_time] => 20140808162708 ) [userId] => 114 [nickName] => wedc [userType] => 2 [comId] => 116 [saledptId] => 11601 [refId] => 1062014 [comName] => SimpleXMLElement Object ( ) [domainUrl] => v=2014080600 [comType] => 02 [comShort] => SimpleXMLElement Object ( ) [parentComId] => 11620001 [expirationTime] => 1407488228735 [planText] => 10116226011162288228735 [signatureValue] => c6959b4eacf7b2f)
这不是可以吗?
你截图中显示字符串长度为 984 字节,而你贴出的只有 509 字节。
还有四百多字节到哪里去了?
成功了 ~~~~~~[]