Rumah >pembangunan bahagian belakang >tutorial php >Mengapa PHP DOMDocument::loadHTML() saya Tidak Mengendalikan Pengekodan UTF-8 dengan Betul?
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="Content-Type" content="text/html; charset=utf-8">'; $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 = ""; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として
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!