2013-05-14 105 views
0

在我使用PHP 5.3.x的CodeIgniter 2.x項目中,我使用以下函數將Dom Document呈現爲XML響應。每件事情都很好。但是由於一些格式錯誤的意外文本(根元素之外的非空白文本),生成的XML解析失敗。PHP生成的XML解析失敗

function renderDOMAsXML(DOMDocument &$dom, $format = true, $status = 200){ 
    $dom->formatOutput = $format; 
    $controller   = &get_instance(); 

    $controller->output->set_status_header($status); 
    $controller->output->set_header('Content-type: application/xml; charset=utf-8'); 
    $controller->output->set_output($dom->saveXML()); 
} 

用於我的好奇心我解碼的格式不正確的意外文本(根元素之外的非空白文本)作爲十六進制格式如下。

\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf\x00ef\x00bb\x00bf 

\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf} 

或類似這樣的

 

我不知道什麼是錯誤的。什麼是畸形的意外文本(根元素以外的非空白文本)?他們是否有任何標題信息?我要如何跳過它們,因爲我想將它呈現爲瀏覽器的XML響應。

+0

不使用CI方法輸出XML,以確定它是DOM還是CI的問題。 – Gordon 2013-05-14 07:01:53

+0

這是php文件編碼的問題,是我用Unicode編碼創建一些文件的錯誤。 – 2013-05-14 08:11:12

回答

1

其實你的代碼沒有問題。只有您的問題php file encoding。永遠不要保存像UTF-8|Unicode|Unicodebig endianUnicode encoding的任何文件。只保存你的php文件爲ANSI Encoding。如果你創建一個PHP文件,UTF-8|Unicode|Unicodebig endian這些編碼的php code自動echo以下畸形意想不到的文本(根元素之外的非空白文本)。

\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf}\x{00ef}\x{00bb}\x{00bf} 

這就是爲什麼你最最新的瀏覽器無法解析您的XML響應,並且由於導致XML解析錯誤。實際上畸形意外文本(非空白文本之外的根元素)可以是用於Unicode encoding文件格式的標題信息。

這些意外的文字總是發生在你的反應的開始,但是從未間斷過,當你如果你正在使用Unicode encoded PHP文件中使用他人的內容類型響應頭。

如果你失戀儘快轉換您所有的文件編碼這種類型的問題爲ANSI Encoding