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
Barbara Streisandasal
2024-12-28 00:43:10172semak imbas

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);
  • 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'));
  • 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'));

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

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:
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