Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menyelesaikan Ralat \"Input is not proper UTF-8\" dalam SimpleXML_Load_String PHP?

Bagaimana untuk Menyelesaikan Ralat \"Input is not proper UTF-8\" dalam SimpleXML_Load_String PHP?

DDD
DDDasal
2024-10-24 06:33:30589semak imbas

How to Resolve

Menyahkod Ralat XML Menggunakan SimpleXML_Load_String PHP

Dalam PHP, menggunakan fungsi simplexml_load_string untuk memproses respons XML kadangkala boleh membawa kepada ralat: "Input bukan UTF-8 yang betul, tunjukkan pengekodan!" Walaupun XML mengisytiharkan pengekodan UTF-8, ia mungkin mengandungi aksara bukan UTF-8, terutamanya apabila berurusan dengan bahasa seperti Sepanyol.

Membetulkan Ketakserasian Pengekodan

Kepada menangani isu ini, beberapa strategi boleh digunakan:

  • Beritahu penyedia data: Hubungi sumber pihak ketiga dan maklumkan masalah pengekodan itu, menggesa mereka untuk membetulkannya.
  • Praproses XML:

    • utf8_encode(): Gunakan fungsi ini untuk menukar XML kepada UTF yang sah -8. Walau bagaimanapun, kaedah ini boleh mengakibatkan mojibake jika XML mengandungi kedua-dua aksara UTF-8 dan bukan UTF-8 yang sah.
    • iconv() atau mbstring: Cuba untuk menukar XML daripada UTF -8 kepada UTF-8 sekali lagi, dengan harapan fungsi akan membetulkan ralat.
    • Pengesahan/pembetulan tersuai: Sahkan dan betulkan urutan pengekodan secara manual, pilihan yang memakan masa.

Mengesan Pengekodan Betul

Malangnya, PHP tidak menyediakan kaedah muktamad untuk mengesan pengekodan yang betul bagi fail XML secara automatik.

Pembetulan Separa

Sebagai penyelesaian sementara, fungsi berikut boleh digunakan untuk membetulkan sebahagian isu pengekodan Latin-1 biasa dalam UTF-8:

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

Perlu diingat bahawa pembetulan ini tidak menyeluruh dan mungkin tidak menyelesaikan semua percanggahan pengekodan.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \"Input is not proper UTF-8\" dalam SimpleXML_Load_String PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn