2013-03-06 107 views
0

我有這樣的代碼XMLXML編碼錯誤

<?php header("Content-Type: text/xml;charset=ISO-8859-7");?> 
<pages> 
<link> 
<title>κεμενο</title> 
<url>http://www.example.com</url> 
</link> 
</pages> 

和這裏生活搜索的HTML代碼時我已經在ŸXML拉丁字符它的正常工作enter image description here但是當我的文字從英文變成希臘,我有此錯誤消息。 警告:DOMDocument :: load()[domdocument.load]:輸入不正確的UTF-8,指示編碼!字節:0xE1爲0x3C值爲0x2F 0x74 /應用程序/ XAMPP/

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-7" /> 
<script> 
function showResult(str) 
{ 
if (str.length==0) 
    { 
    document.getElementById("livesearch").innerHTML=""; 
    document.getElementById("livesearch").style.border="0px"; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("livesearch").innerHTML=xmlhttp.responseText; 
    document.getElementById("livesearch").style.border="1px solid #A5ACB2"; 
    } 
    } 
xmlhttp.open("GET","livesearch.php?q="+str,true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<form> 
<input type="text" size="30" onkeyup="showResult(this.value)"> 
<div id="livesearch"></div> 
</form> 
</body> 
</html> 
+0

當你把'charset = ISO-8859-7'改成'charset = utf-8'時,你是否也將實際文件的編碼轉換爲utf-8?你使用哪個編輯器? – VolkerK 2013-03-06 11:26:28

+0

我正在使用Coda 2 – Arturik1988 2013-03-06 11:29:53

回答

1

輸入不正確的UTF-8編碼表示

...所以我想你的問題是如何指示用XML編碼。因爲它似乎是一個靜態的文件:

<?xml version="1.0" encoding="ISO-8859-7"?> 
<pages> 
<link> 
<title>κεμενο</title> 
<url>http://www.example.com</url> 
</link> 
</pages> 

根據您的PHP設置,您可能需要混淆<?標記,以便它不會解釋爲一個PHP標籤。

+0

,但是當我包含編碼UTF-8時,它不會顯示希臘字符 – Arturik1988 2013-03-06 11:18:34

+0

,我現在可以做什麼? – Arturik1988 2013-03-06 11:25:25

+0

那麼,爲什麼你現在提到UTF-8呢?如果你想使用** ISO-8859-7 **,輸入'encoding =「ISO-8859-7」'並將你的文件保存爲** ISO-8859-7 **。如果你想使用'UTF-8',輸入'encoding =「UTF-8」'並將你的文件保存爲** UTF-8 **。就如此容易。 – 2013-03-06 12:35:35

1

您正在使用方法DOMDocument::load()從文件加載XML文檔。

該文件正在使用ISO-8859-7編碼的,然而,XML沒有它的XML聲明(順便說一句,在header()調用不會用信號load()編碼)信號這個編碼。

因此DOM文檔假定該文件是在UTF-8,然而,它運行在非法的二進制序列:

二進制八位位組"\xE2"信號編碼一種Unicode代碼點2個folloing八位字節。然而,你的情況下接下來的兩個八位字節是"\x3C\x2F",它們是無效的連續字節。

再次看到錯誤消息:

警告:DOM文檔::負載()[domdocument.load]:輸入是不正確的UTF-8,編碼指示!字節:0xE1爲0x3C值爲0x2F 0x74在...

這暗示兩種可能的解決方案:

  1. 指明編碼。
  2. 提供XML字符串作爲UTF-8編碼。

第一種選擇將意味着對文件的信令的編碼的頂部使用添加XML聲明:

<?xml version=\"1.0\" encoding=\"ISO-8859-7\"?> 
<pages> 

該文件可以然後被裝載和重新編碼的:

$doc->load($path); 
$doc->encoding = 'UTF-8'; 

第二種方法是在加載之前對字符串進行重新編碼,但如果您設置了我所推薦的XML聲明,通常不需要這樣做。(!不是文件名)

重新編碼字符串的工作原理如下:

$xmlUTF_8 = iconv('ISO-8859-7', 'UTF-8', $xmlISO_8859_7); 

希望這有助於。另請參閱How to keep the Chinese or other foreign language as they are instead of converting them into codes?以及顯示變通方法的其他鏈接問題。