ホームページ >バックエンド開発 >PHPチュートリアル >PHP の SimpleXML との XML エンコーディングの非互換性を解決するにはどうすればよいですか?
PHP の simplexml_load_string を使用して XML データを処理する場合、エンコーディングの非互換性が発生する可能性があります。 UTF-8 であると主張しているにもかかわらず、XML コンテンツにはエンコードされていない文字が含まれている可能性があり、「入力が適切な UTF-8 ではありません」というエラーが発生します。
通常、この問題は、XML コンテンツが UTF-8 ではなく ISO-8859-1 でエンコードされているために発生します。最善の解決策は、データプロバイダーに連絡して、エンコードを修正するよう依頼することです。
ただし、ソースを変更できない場合は、前処理技術があります。問題を軽減するには:
1.エンコーディングの検出:
XML ファイルの正しいエンコーディングを検出するには、PHP の mb_detect_encoding 関数を使用できます。この関数は、統計的手法に基づいてエンコーディングを決定しようとします。
2. ISO-8859-1 から UTF-8 への変換:
検出されたエンコーディングが ISO-8859-1 の場合は、PHP の iconv 関数または mb_convert_encoding 関数を使用して XML コンテンツを UTF-8 に変換できます。
<code class="php">$utf8_content = iconv('ISO-8859-1', 'UTF-8', $latin1_content);</code>
3.部分的な修正:
次のコードは、XML コンテンツ内の一部の非 UTF-8 シーケンスを、同等の UTF-8 シーケンスに置き換えることで部分的に修正できます:
<code class="php">function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str) { return preg_replace_callback('#[\xA1-\xFF](?![\x80-\xBF]{2,})#', 'utf8_encode_callback', $str); }</code>
4.手動の検証と修復:
これはより複雑で時間のかかるアプローチですが、XML コンテンツ内の無効な UTF-8 シーケンスを手動で検証して修復する必要があります。
使用する前処理方法に関係なく、エンコードの問題についてデータ プロバイダーに通知し、ソースで修正できるようにすることが重要です。これにより、今後のデータは適切な UTF-8 形式で配信されるようになります。
以上がPHP の SimpleXML との XML エンコーディングの非互換性を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。