2011-02-17 1 views
2

私のノードの1つにいくつかのhtmlを持つxmlフィードがあります。 だから基本的にXMLがISO-8859-1エンコーディングであるÂxmlフィードの一部の文字の前に表示されます

<?xml version="1.0" encoding="ISO-8859-1"?> 

は、任意の複数のヘッダはありません

<user_id>'.$review[user_id].'</user_id> 
<content>'.htmlspecialchars(bbcode($review[content])).'</content> 
<content_bbcode>'.htmlspecialchars($review[content]).'</content_bbcode> 
<added_date>'.$review[added_date].'</added_date> 

PHPでこのようにそれを作ります。

もう一方の端では、ファイルを取得してコンポーネントの部分(ノード)に分割するためにsimplexml_load_stringを使用しています。

私の問題は、一部の文字では「£」、他の文字では文字の前に表示され、他の場合は全く表示されないということです。私のウェブサイトはISO-8859-1にもあります。誰かがこれや仕事の理由を知っていますか?

iconvについていくつかのことを聞いたことがありますが、それはうまくいかないようです。 他のアイデアは、str_replaceスクリプトを作成することですが、それは少し複雑に聞こえ、すべての文字を取得できません。

ありがとうございました。 リチャード

+3

ちょうど推測 - ソースデータはUTF-8になる可能性があります – binaryLV

答えて

0

私はちょうど入って削除したと思います。 リチャード

2

どのようにiconvを使用しますか?出力前に試してみてください。

$review['content'] = iconv('UTF-8', 'ISO-8859-1', $review['content']); 

P.S. "Â"問題とは関係ありませんが、おそらく配列キーの引用符がありません - ではなく、でなければなりません。 $review配列が使用されている他の場所でも同じです。

+0

私はそれを直前に出しました。またはXMLに? 乾杯 リチャード –

0

出力をUTF-8で送信しているようですが、文字セットをLatin-1として指定しているようです。あなたのデータベースに正しい文字セットがありますか接続

MySQLクエリSET NAMES latin1は、DB接続からのすべての次のデータをISO-8859-1(Latin1)に変換します。

+0

テーブルの文字セットはすでにlatin1にあります。これで足りないの? –

+0

私はちょうどw3cバリデーターを使って実行しました。それはUTF-8だと言いますが、ヘッダーにISO-8859-1と言っています。私はそれが来るときに鼻です!あなたが照らすことができるどんな光も素晴らしいでしょう。 –

+0

@Richard Housham:*接続*文字セットが指定されていない限り、MySQLはデータを接続文字セットに変換してから送信します。また、あなたが送信しているHTTPヘッダーを確認してください。 'Content-Type:text/xml; charset = utf-8'となります。バリデーターはコンテンツをスニッフィングするIIRCです。ヘッダー内のメタデータの内容にかかわらず、実際にはデータはUTF-8であると考えられます。 – Piskvor

関連する問題