2013-02-19 90 views
0

我一直在使用XML API進行字符編碼時出現問題,而且似乎無法解決問題。我想知道是否有人會知道如何去做這件事。我已經嘗試了以下幾段代碼,它們都產生了一些奇怪的字符編碼問題。使用XML和PHP進行字符編碼問題file_get_contents

守則#1

$xml_url = "http://myurl.com/123.xml"; 
$xml = simplexml_load_file($xml_url); 

守則#2

$xml_url = "http://myurl.com/123.xml"; 
$contents = file_get_contents($xml_url); 
$xml = new SimpleXMLElement($contents); 

的方式,一些字符,例如撇號出來都是這樣

strengthening resumés 

有數以百計與此有關的錯誤。我的代碼的頂部看起來像這樣

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

我試着刪除它,以及把它作爲HTML 5,我似乎無法得到任何東西。我嘗試了其他拉丁字符編碼等,它變得越來越糟。有沒有人有任何想法如何解決這個問題?

回答

0

當UTF-8編碼文本é被視爲ISO-8859-1編碼文本時,它顯示爲é

如果我沒有記錯,SimpleXML僅適用於UTF-8編碼數據。因此,如果數據不是UTF-8,則需要對所讀取的所有文件進行編碼,並且還要將添加到文檔中的文本字符串(在使用SimpleXML方法之前)進行編碼。您可以使用iconv()utf8_encode()進行轉換。

如果您的代碼具有非ASCII文字,請檢查您的代碼文件的編碼。

+0

感謝您的回覆。我對char編碼知識的缺乏表示歉意,但我會在哪裏使用utf8_encode?它會在內部的實際XML值(即$ xml-> thisValue)還是實際的URL本身? – 2013-02-19 19:49:02

+0

好的。我看起來有一半。我能夠使用utf8_decode()更改爲é,但是,當存儲在mysql中時,撇號會出現這樣的其他編碼問題:' – 2013-02-19 20:03:58

+0

@SamOh這是相同的問題:捲曲當用ISO-8859-1文本查看時,用UTF-8編碼的撇號看起來像「’」。確保在連接到數據庫時使用正確的編碼設置。如果需要,對所有接收/存儲到數據庫的文本使用解碼或編碼功能。將所有內容(輸入,輸出,數據庫,文件存儲)保存爲Unicode是避免字符集轉換以及與之相關的問題的好方法。 – jasso 2013-02-19 22:44:58