Rumah > pembangunan bahagian belakang > tutorial php > Mengapa PHP DOMDocument::loadHTML() saya Tidak Mengendalikan Pengekodan UTF-8 dengan Betul?

Mengapa PHP DOMDocument::loadHTML() saya Tidak Mengendalikan Pengekodan UTF-8 dengan Betul?

Barbara Streisand
Lepaskan: 2024-12-28 00:43:10
asal
248 orang telah melayarinya

Why is my PHP DOMDocument::loadHTML() Not Handling UTF-8 Encoding Correctly?

PHP DOMDocument loadHTML Tidak Mengekod UTF-8 Dengan Betul

Apabila cuba menghuraikan HTML menggunakan DOMDocument::loadHTML(), anda mungkin menghadapi masalah dengan pengekodan UTF-8 yang betul. Secara lalai, DOMDocument menganggap rentetan input sebagai ISO-8859-1, yang boleh membawa kepada ralat apabila berurusan dengan data UTF-8.

Penyelesaian:

Untuk memastikan betul pengekodan, anda boleh menggunakan pelbagai kaedah:

  • Prepend Pengisytiharan Pengekodan: Tambah perisytiharan pengekodan XML atau perisytiharan charset meta HTML untuk menunjukkan kehadiran aksara UTF-8:

    $contentType = '<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;>';
    $dom->loadHTML($contentType . $profile);
    Salin selepas log masuk
  • Gunakan SmartDOMDocument: Jika HTML input mungkin sudah mengandungi pengisytiharan, gunakan perpustakaan SmartDOMDocument untuk menyelesaikan potensi konflik:

    $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
    Salin selepas log masuk
  • Alternatif: Dalam PHP 8.2 , gunakan mb_encode_numericentity() untuk pilihan pengekodan yang lebih selamat:

    $dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
    Salin selepas log masuk

HTML5 Pertimbangan:

DOMDocument menggunakan penghurai HTML4. Untuk dokumen HTML5, pertimbangkan untuk menggunakan penghurai HTML alternatif yang direka bentuk untuk pematuhan HTML5.

Contoh:

Kod berikut menunjukkan penggunaan mb_convert_encoding() untuk membetulkan UTF-8 yang salah pengekodan:

$profile = "

イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として

"; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa PHP DOMDocument::loadHTML() saya Tidak Mengendalikan Pengekodan UTF-8 dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China 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