DOMDocument Berjuang dengan Aksara UTF-8: Penyiasatan Teliti
DOMDocument, sebuah perpustakaan dalam PHP, direka bentuk untuk mengendalikan HTML, yang secara semula jadi menggunakan pengekodan ISO-8859-1. Walau bagaimanapun, apabila cuba memuatkan HTML yang dikodkan UTF-8 ke dalam contoh DOMDocument, output yang terhasil mungkin mempamerkan aksara utf-8 yang rosak.
Masalahnya:
Contohnya kod yang disediakan cuba memuatkan rentetan HTML yang dikodkan UTF-8 berikut:
<code class="html"><html> <head> <meta charset="utf-8"> <title>Test!</title> </head> <body> <h1>☆ Hello ☆ World ☆</h1> </body> </html></code>
Walau bagaimanapun, output mengandungi entiti HTML dan bukannya aksara yang dimaksudkan:
<code class="html"><!DOCTYPE html> <html><head><meta charset="utf-8"><title>Test!</title></head><body> <h1>&acirc;&#152;&#134; Hello &acirc;&#152;&#134; World &acirc;&#152;&#134;</h1> </body></html></code>
Penyelesaian :
Terdapat dua pendekatan utama untuk menyelesaikan isu ini:
1. Menukar Aksara kepada Entiti HTML:
Fungsi mb_convert_encoding PHP boleh mengubah aksara di luar julat AS-ASCII kepada entiti HTML yang sepadan. Ini memastikan bahawa DOMDocument boleh mentafsir rentetan dengan betul:
<code class="php">$us_ascii = mb_convert_encoding($utf_8, 'HTML-ENTITIES', 'UTF-8');</code>
2. Menentukan Petunjuk Pengekodan:
DOMDocument boleh dibayangkan tentang pengekodan rentetan HTML dengan menambahkan tag meta Jenis Kandungan:
<code class="html"><meta http-equiv="content-type" content="text/html; charset=utf-8"></code>
Walau bagaimanapun, menambah teg meta secara terus kepada rentetan HTML dalam kod boleh mengakibatkan ralat pengesahan. Untuk mengelakkan ini, anda boleh memuatkan rentetan tanpa teg meta dan menggunakan kaedah insertBefore untuk menambahkannya sebagai anak pertama elemen kepala:
<code class="php">$dom = new DomDocument(); $dom->loadHTML($html); $head = $dom->getElementsByTagName('head')->item(0); $meta = $dom->createElement('meta'); $meta->setAttribute('http-equiv', 'content-type'); $meta->setAttribute('content', 'text/html; charset=utf-8'); $head->insertBefore($meta, $head->firstChild); $html = $dom->saveHTML();</code>
Dengan menggunakan salah satu kaedah ini, DOMDocument boleh mengendalikan dengan berkesan HTML yang dikodkan UTF-8, memastikan perwakilan dan penyahkodan yang betul bagi aksara bukan AS-ASCII.
Atas ialah kandungan terperinci Mengapakah DOMDocument Bergelut dengan Aksara UTF-8 dan Bagaimana untuk Memperbaikinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!