PHP DOMDocument loadHTML Tidak Dapat Mengekod UTF-8 Dengan Betul
Kaedah DOMDocument loadHTML menganggap input anda dikodkan dalam ISO-8859-1, yang boleh membawa kepada pengekodan UTF-8 yang salah aksara.
Penghurai asas yang digunakan oleh DOMDocument menjangkakan input HTML4, yang berpotensi menyebabkan cabaran dengan dokumen HTML5.
Penyelesaian:
Untuk menyelesaikan isu ini, nyatakan pengekodan aksara HTML anda menggunakan salah satu daripada yang berikut kaedah:
Pengisytiharan Pengekodan XML:
ContentType Header:
Awalan Pengekodan XML:
Penyelesaian untuk HTML Tidak Diketahui Kandungan:
Jika anda tidak boleh membuat andaian tentang pengekodan, gunakan penyelesaian seperti SmartDOMDocument atau kod PHP berikut:
$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>'; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();</p> <p><strong>Awas untuk PHP 8.2 :</strong></p> <p>Dalam PHP 8.2 , fungsi mb_convert_encoding akan menjana penamatan amaran. Sebagai alternatif:</p> <pre class="brush:php;toolbar:false">$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
Walaupun tidak sesuai, kaedah ini memastikan pengekodan selamat kerana semua aksara boleh diwakili dalam ISO-8859-1.
Atas ialah kandungan terperinci Mengapa LoadHTML PHP DOMDocument Gagal dengan Pengekodan UTF-8 dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!