版主,又來求助了。。。這回事是網頁返回的XML資料,我不知道為什麼不能用simplexml讀取,var_dump顯示false
echo '#########################'.'
';var_dump($xml); echo '#########################';echo '
'.'
'.'
'.$xml->xsm->nickname;
如果用上面這段直接列印是這樣子的:
echo '#########################'.'
';var_dump(simplexml_load_string($xml); echo '#########################';echo '
'.'
'.'
'.$xml->xsm->nickname;
用這段代碼列印就會顯示bool(false)
求解決
回複討論(解決方案)
$xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));
$xml = preg_replace('/!|--/', '', $xml);var_dump(simplexml_load_string($xml));
//$xml='';$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的時候依然顯示失敗
還是那話,你為什麼要自作聰明呢
你為什麼要自作聰明呢
你給My Code貼上去也是無法載入...
那是因為你不給我你的資料
還是那話,你為什麼要自作聰明呢
這是直接複製給My Code貼上去運行後的結果...
依然得去掉simplexml載入的語句才能dump出來
你光是沒有用的!
你怎麼知道其中沒有不可列印的字元呢?
那是因為你不給我你的資料
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 位元組。
還有四百多位元組到哪裡去了?
成功了 ~~~~~~[]