ホームページ  >  記事  >  バックエンド開発  >  PHP の SimpleXML_Load_String の「入力が適切な UTF-8 ではありません」エラーを解決する方法

PHP の SimpleXML_Load_String の「入力が適切な UTF-8 ではありません」エラーを解決する方法

DDD
DDDオリジナル
2024-10-24 06:33:30589ブラウズ

How to Resolve

PHP の SimpleXML_Load_String を使用した XML エラーのデコード

PHP で、simplexml_load_string 関数を使用して XML 応答を処理すると、次のエラーが発生する場合があります。は適切な UTF-8 ではありません。エンコーディングを示してください。」 XML で UTF-8 エンコーディングが宣言されているにもかかわらず、特にスペイン語などの言語を扱う場合、非 UTF-8 文字が含まれる可能性があります。

エンコーディングの非互換性の修正

この問題に対処するには、いくつかの戦略を採用できます。

  • データプロバイダーに通知する: サードパーティのソースに連絡し、エンコードの問題について通知し、修正するよう促します。
  • XML の前処理:

    • utf8_encode(): この関数を使用して XML を有効な UTF に変換します-8.ただし、XML に有効な UTF-8 文字と非 UTF-8 文字の両方が含まれている場合、このメソッドでは mojibake が発生する可能性があります。
    • iconv() または mbstring: XML を UTF から変換しようとします。関数がエラーを修正することを期待して、-8 を再度 UTF-8 に変換します。
    • カスタム検証/修正: エンコード シーケンスを手動で検証して修正します。これは時間のかかるオプションです。

正しいエンコーディングの検出

残念ながら、PHP には、XML ファイルの正しいエンコーディングを自動的に検出する決定的な方法が提供されていません。

部分修正

一時的な解決策として、次の関数を使用して、UTF-8 での一般的な Latin-1 エンコーディングの問題を部分的に修正できます:

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);
}

function utf8_encode_callback($m)
{
    return utf8_encode($m[0]);
}

この修正は包括的なものではなく、すべてのエンコーディングの不一致を解決できるわけではないことに注意してください。

以上がPHP の SimpleXML_Load_String の「入力が適切な UTF-8 ではありません」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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