Mengapakah DOMDocument Bergelut dengan Aksara UTF-8 dan Bagaimana untuk Memperbaikinya?

Linda Hamilton
Lepaskan: 2024-11-04 09:55:02
asal
806 orang telah melayarinya

Why Does DOMDocument Struggle with UTF-8 Characters and How to Fix It?

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>
Salin selepas log masuk

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>&amp;acirc;&amp;#152;&amp;#134; Hello &amp;acirc;&amp;#152;&amp;#134; World &amp;acirc;&amp;#152;&amp;#134;</h1>    
</body></html></code>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
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