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

DDD
Lepaskan: 2024-10-24 06:33:30
asal
588 orang telah melayarinya

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]);
}
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!