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

入力が適切な 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 に答える
2

メソッドDOMDocument::load()を使用して、ファイルから XML ドキュメントをロードしています。

そのファイルはISO-8859-7エンコーディングを使用していますが、XML は XML 宣言でこのエンコーディングを通知しません (ところで、header()呼び出しは のエンコーディングを通知しませんload())。

したがって、DOMDocument はファイルが UTF-8 であると想定しますが、不正なバイナリ シーケンスで実行されます。

バイナリ オクテットは、"\xE2"1 つの Unicode コードポイントをエンコードする 2 つの後続オクテットを通知します。ただし、あなたの場合の次の2つのオクテットは"\x3C\x2F"、有効な継続バイトではありません。

エラーメッセージをもう一度見てください:

警告: DOMDocument::load() [domdocument.load]: 入力が適切な UTF-8 ではありません。エンコーディングを示してください! バイト: 0xE1 0x3C 0x2F 0x74 in ...

これは、2 つの潜在的な解決策を示唆しています。

  1. エンコーディングを示します。
  2. XML 文字列を UTF-8 エンコーディングとして提供します。

最初のオプションは、使用されるエンコーディングを通知するファイルの上に XML 宣言を追加することを意味します。

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

その後、このファイルをロードして再エンコードできます。

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

2 番目の方法は、文字列を読み込む前に再エンコードすることですが、私が推奨する XML 宣言を設定している場合、通常はその必要はありません。

文字列 (ファイル名ではありません!) を再エンコードすると、次のように動作します。

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

お役に立てれば。また、中国語やその他の外国語をコードに変換する代わりにそのまま保持する方法も参照してください。回避策を示している他のリンクされた質問があります。

于 2013-03-06T19:17:15.443 に答える