2014-10-19 172 views
1

我有一個從URL解析XMLXML錯誤:無效字符

$parser=xml_parser_create(); 

function char($parser,$data) 
    { 
    echo $data; 
    } 

xml_set_character_data_handler($parser,"char"); 
$fp=fopen("http://example.com","r"); 

while ($data=fread($fp,4096)) 
    { 
    xml_parse($parser,$data,feof($fp)) or 
    die (sprintf("XML Error: %s at line %d", 
    xml_error_string(xml_get_error_code($parser)), 
    xml_get_current_line_number($parser))); 
    } 

通過上述fopen的調用返回的XML是這樣的一隻的Xml沒有任何編碼設置在頂部下面的PHP代碼。 上述代碼正在輸出XML錯誤:瀏覽器上第1008行的字符無效。

<entries> //root element 
    <entry> 
    <TITLE><![CDATA[xxxx yyyyyyyyyy]]></TITLE> 
    </entry> 
    <entry> 
    <TITLE><![CDATA[xxxx Gold… yyyyyyyyyy]]></TITLE>//this is line no 1008 that returns invalid character error and script stops 
    </entry> 
</entries> 

我認爲這可能是由於橢圓形,因爲當我保存XML在本地文件在記事本++回來再喂該XML文件上面的解析器運行良好。

我想直接從URL運行這個XML而不是保存到目錄中的,因爲這將是一個開銷我不need.Thanks

回答

0

確保您從拉動文件的Web服務器發送正確的字符編碼,當它服務頁面。您應該看到在響應報頭是這樣的:

Content-Type:"text/xml; charset=utf-8" 

標頭可以在督察的網絡面板,當你直接要求XML文件中查看在任何現代的瀏覽器。

您還應該在文件本身指定編碼。第一行應該是這個樣子:

<?xml encoding='UTF-8'?> 

如果失敗,你總是可以嘗試使用utf8_decode()這是一個XML_Parser功能會嘗試將數據轉換爲ISO-8859-1。

+0

我現在沒有任何對服務器的控制權。因此,設置標題信息是不可能的。雖然我可以在從服務器獲取xml數據之後添加<?xml encoding ='UTF-8'?>,然後將數據傳遞給解析器。是否有任何其他方式可以使此工作成爲可能。 – 2014-10-19 07:44:18

+0

檢查這兩個項目,我還添加了最後一個建議;我還沒有使用XML Parser函數,因爲我發現SimpleXML更簡單了! – miken32 2014-10-19 07:55:42

+0

我做了utf8_decode(),它工作。謝謝你幫助我並擴大社區。 – 2014-10-19 08:03:45