2013-03-06 78 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?以及显示变通方法的其他链接问题。