Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah DOMDocument Bergelut dengan Aksara UTF-8 dan Bagaimana untuk Memperbaikinya?

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

Linda Hamilton
Linda Hamiltonasal
2024-11-04 09:55:02815semak imbas

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>

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>

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!

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