4

私が解析しているいくつかのXMLファイル(多くの場合RSS)で、ノードからテキストを抽出した後にToday’s Newestなりつつあるような文字を含むテキストに出くわします。Today’s Newestこれは、デコードプロセスを正しく処理していないことを示しています。

スクリプトにパッチを適用してこの1つのバグを修正することもできますが、文字化けしている他の多くの文字がある場合はどうなりますか?UTF-8スクリプトに変換するときに、エンコーディングを破棄せずにXMLファイルをダイジェストする適切な方法は何ですか?

これが私が試したもののいくつかですが、うまくいかないようです:

$xml = file_get_contents($file);

// One: still contains ’
//$xml = @iconv('UTF-8', 'UTF-8//IGNORE', $xml);

// Two: LibXMLError Entity 'rsquo' not defined
//$xml = htmlentities($xml, null, 'UTF-8');
//$xml = htmlspecialchars_decode($xml, ENT_QUOTES);

// Three: still contains ’
//$xml = mb_convert_encoding($xml, "UTF-8", "UTF-8");

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT);
4

2 に答える 2

1

これを試してみてください:

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT); $xml->addAttribute('encoding', 'UTF-8');

于 2012-08-09T15:22:24.837 に答える
1

コンテンツの出力方法を確認してください。これは、出力ターゲットがUTF-8をサポートしていない場合にも発生する可能性があります。

ブラウザに出力することを想定しているので、ブラウザのエンコーディングを確認し、XMLから正しいテキストを取得する可能性があるため、明示的にUTF-8に設定してみてください。

上記が役に立たない場合は、 DOMDocumentを使用してXMLをロードしてみてください

于 2012-08-09T15:29:59.917 に答える