ホームページ  >  記事  >  バックエンド開発  >  PHP の SimpleXML との XML エンコーディングの非互換性を解決するにはどうすればよいですか?

PHP の SimpleXML との XML エンコーディングの非互換性を解決するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-24 07:16:01618ブラウズ

How to Resolve XML Encoding Incompatibilities with PHP's SimpleXML?

PHP の SimpleXML による非 UTF-8 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。