1

我有这个代码 xml

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

当我在 y xml 上有拉丁字符时,这里的 html 代码用于实时搜索,它工作正常在此处输入图像描述,但是当我将字符从英语更改为希腊语时,我有这个错误消息。 警告:DOMDocument::load() [domdocument.load]: 输入不是正确的 UTF-8,表示编码!字节:/Applications/XAMPP/ 中的 0xE1 0x3C 0x2F 0x74

<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>
4

2 回答 2

2

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

该文件正在使用ISO-8859-7编码,但是,XML 并未在其 XML 声明中表示此编码(顺便说一句,该header()调用未表示 的编码load())。

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

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

再次查看错误消息:

警告:DOMDocument::load() [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);

希望这可以帮助。另请参阅如何保持中文或其他外语原样而不是将它们转换为代码?以及其他显示解决方法的链接问题。

于 2013-03-06T19:17:15.443 回答
2

输入不是正确的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 标签。

于 2013-03-06T11:16:43.537 回答