我有这个代码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上有拉丁字符它工作正常但是当我将字符从英语更改为希腊时我有这个错误消息。 警告: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>
答案 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 ...
这暗示了两种可能的解决方案:
第一个选项意味着在文件顶部添加一个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?以及其他显示解决方法的链接问题。