1

simplexml_load_string を使用して標準外の文字を使用すると問題が発生します。

file_get_contents を使用して、新聞の xml フィードを読み込みました。コンテンツを画面に印刷すると、記事の1つのタイトルが次のようになります。

<title>&#8216;If Legault were running in Alberta, he&#8217;d be more popular&#8217;: How right-wing is the CAQ?</title>

私がこれを行う場合:

$feed = @simplexml_load_string($xml);

$feed の結果を出力すると、タイトルが次のように変更されます。

[title] => �If Legault were running in Alberta, he�d be more popular�: How right-wing is the CAQ?

これらの文字がこのように表示されないようにする方法について何かアドバイスはありますか?

4

2 に答える 2

0

これは、SimpleXML が UTF-8 文字列を作成しているように見えます。これは、ISO-8859-1 (latin-1) または CP-1252 に近いものでレンダリングされます。

結果をファイルに保存し、そのファイルを Web サーバー経由で提供すると、ブラウザはファイルで宣言されたエンコーディングを使用します。

Web ページに含める Web ページのエンコーディングは UTF-8 ではないため、文字列を使用しているエンコーディング (ISO-8859-1 (latin-1) など) に変換する必要があります。

これは、iconv() を使用して簡単に実行できます。

$xmlout = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $xmlout);

データベースへの保存 データベース列は UTF-8 照合を使用していないため、iconv を使用して文字列をデータベースが使用する文字セットに変換する必要があります。

データベースの照合順序が、レンダリングするエンコーディングと同じであると仮定すると、データベースから読み取るときに何もする必要はありません。

説明 UTF-8 では、0xc2 プレフィックス バイトを使用して、アクセント付き文字、通貨記号、分数、上付き文字 2 および 3、著作権および登録商標記号などの文字を含む「Latin-1 Supplement」ブロックの上半分にアクセスします。 、および非改行スペース。

ただし、ISO-8859-1 では、バイト 0xC2 は Â を表します。したがって、UTF-8 文字列がそれらの 1 つとして誤って解釈されると、Â の後に他の意味のない文字が続きます。

于 2012-08-10T15:23:27.443 に答える
0

これは文字セットの問題です。utf8 である必要があります。コンテンツに対して utf8_decode を実行できますが、入力 (フィード) の文字セットを出力 (私が推測する html ページ) に一致させることで、この問題を修正することをお勧めします。

于 2012-08-10T15:24:11.670 に答える