2012-01-09 6 views
2

私のDBには、word文書からコピーされて貼り付けられたテキストがあります。中にはいくつかの中括弧と中括弧が含まれています。 PHPコードは、このテキストをXML要素の1つとして持つXMLデータ/文書を生成しています。xmlを生成する際に、PHPで中括弧と中括弧を引用符で囲みます。

これは私がXMLドキュメント

を表示しようとすると、このページには、次のエラーが含まれている取得していますエラーです:列1のライン40上の

エラー:エンコードのエラー

以下は、最初のエラーまでのページのレンダリングです。

hereの投稿に記載されているように試しましたが、うまくいきません。また試しました

$ output = iconv( 'UTF-8'、 'ASCII // TRANSLIT'、$ input);

上記のようにhere。これは、中括弧やアポストロフィが現れるまでテキストを表示します。ここで異なる文字出力フォーマットについて言及する必要はありますか?

XML文書を生成するときに、これらのタイプの特殊文字を処理するためにPHPで利用できる関数はありますか?私はここでのXML documnetため

<?xml version="1.0" encoding="utf-8"?>文字エンコーディングを使用しています。このようにCDATAブロックでカーリーアポストロフィを含むテキスト・ノードを包むようにしてください私のコードの一部

header('Content-type: text/xml'); 
echo '<?xml version="1.0" encoding="utf-8"?>'; 

$item = mysql_fetch_object($result); 
<listitems> 
    <item> 
     <name><?=htmlspecialchars(stripslashes($item->name))?></name> 
     <details><?=htmlspecialchars(stripslashes($item->details))?></details> 
     . 
     . 
     . 
     . 

    </item> 
</listitems> 
+0

詳細情報が必要です。あなたがそれをフェッチするときに、どのキャラクタセットがデータですか?ドキュメントの生成に使用しているPHPコードをいくつか表示できますか? –

+0

自分のコードの一部で質問を更新しました。 –

+0

データベース内のデータはどの文字セットですか? –

答えて

3

それはそれはあなたがISO-8859-1データをフェッチし、UTF-8として出力されている可能性がありDEFAULT CHARSET = latin1の

言います。その結果、128の基本ASCII文字を超える無効な文字が作成されます。

$出力=のiconv( 'ISO-8859-1'、 'UTF-8 // TRANSLIT'、$入力);:

このiconv()をお試しください

+0

ありがとうPekka、それは動作します:)私たちはこのiconv( 'latin1'、 'UTF-8'、$ appObj-> description)のように書くことができます。表のようにlatin1と言います。 –

+1

"Latin1"はWindows Latin 1、windows-1252を参照することもできます。ISO-8859-1にはcurly apostrophesやcurly quotesは含まれていませんが、プログラムがISO-8859-1をWindows-1252として効果的に扱うことは珍しくありません。 –

+0

@Jukkaああ、その詳細は私を逃げた - よく知って、感謝! [mySQLのlatin1はISO-8559-1ではなくWindows-1252と同等に見える](http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html)。しかし、この@S Kは、curly quotesがうまくいかない場合、iconvの最初のパラメータとして 'windows-1252'を使う必要があるかもしれません。 –

0

です:

<text><![CDATA[This is my test´s text]]></text> 

そうすれば、xmlビューアがそのテキストを解析して正しく表示されないようにすることができます。テーブルの上に

+0

データは表示されていましたが、一部のデータしか表示されませんでした。真ん中に止まった。 –