xml编码错误

时间:2013-03-06 11:13:45

标签: php xml encoding character-encoding

我有这个代码xml

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

和html代码在这里进行实时搜索,当我在y xml上有拉丁字符它工作正常enter image description here但是当我将字符从英语更改为希腊时我有这个错误消息。 警告:DOMDocument :: load()[domdocument.load]:输入不正确的UTF-8,表示编码!字节:0xE1 0x3C 0x2F 0x74 in / Applications / 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>

2 个答案:

答案 0 :(得分: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标记。

答案 1 :(得分:1)

您正在使用方法DOMDocument::load()从文件加载XML文档。

该文件正在使用ISO-8859-7编码,但是,XML并未在其XML声明中发出此编码信号(顺便说一下,header()调用不表示{{1}的编码})。

因此DOMDocument假定文件是UTF-8,但是它运行在非法的二进制序列上:

二进制八位字节load()表示编码一个Unicode代码点的两个后续八位字节。但是,在您的情况下,接下来的两个八位字节是"\xE2",它们不是有效的连续字节。

再次看到错误消息:

  

警告:DOMDocument :: load()[domdocument.load]:输入不正确的UTF-8,表示编码!字节:0xE1 0x3C 0x2F 0x74 in ...

这暗示了两种可能的解决方案:

  1. 表示编码。
  2. 将XML字符串提供为UTF-8编码。
  3. 第一个选项意味着在文件顶部添加一个XML声明,用于表示所使用的编码:

    "\x3C\x2F"

    然后可以加载和重新编码该文件:

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

    第二种方法是在加载之前重新编码字符串,但是如果你设置我推荐的XML声明,通常不需要这样做。

    重新编码字符串(不是文件名!)可以实现以下功能:

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

    希望这会有所帮助。另请参阅How to keep the Chinese or other foreign language as they are instead of converting them into codes?以及其他显示解决方法的链接问题。