Rumah > pembangunan bahagian belakang > tutorial php > Mengapakah fungsi PHP DOMDocument loadHTML saya tidak mengendalikan pengekodan UTF-8 dengan betul?

Mengapakah fungsi PHP DOMDocument loadHTML saya tidak mengendalikan pengekodan UTF-8 dengan betul?

Patricia Arquette
Lepaskan: 2024-12-11 19:59:15
asal
970 orang telah melayarinya

Why is my PHP DOMDocument loadHTML function not handling UTF-8 encoding correctly?

PHP DOMDocument loadHTML Tidak Mengekodkan UTF-8 Dengan Betul

Isu

Anda menggunakan DOMDocument untuk menghuraikan HTML, tetapi pengekodan nampaknya hilang apabila anda memuatkan HTML. Aksara Jepun dalam HTML digantikan dengan teks bercelaru, sementara ia dipaparkan dengan betul apabila mengeluarkan rentetan HTML secara terus melalui gema.

Sebab

DOMDocument menganggap rentetan input berada dalam ISO-8859-1 (set aksara lalai HTTP/1.1) secara lalai. Apabila menghuraikan rentetan UTF-8, andaian yang salah ini mengakibatkan salah tafsir, membawa kepada aksara bercelaru.

Penyelesaian

Untuk memastikan DOMDocument memuatkan rentetan HTML dengan pengekodan yang betul, anda mempunyai beberapa pilihan:

  1. Sediakan Pengisytiharan Pengekodan XML atau Meta Charset Pengisytiharan: Sebelum memuatkan rentetan HTML, tambahkan atau . Ini memaksa rentetan untuk dianggap sebagai UTF-8.
  2. Gunakan SmartDOMDocument: Pustaka luaran ini menawarkan fungsi loadHTMLCharset yang secara automatik mengesan dan mengendalikan pengekodan yang betul.
  3. Tukar String kepada Entiti HTML: Fungsi mb_convert_encoding PHP boleh menukar Rentetan HTML kepada entiti HTML menggunakan pengekodan UTF-8. Muatkan rentetan yang ditukar ini ke dalam DOMDocument.
  4. Gunakan mb_encode_numericentity: Fungsi ini mengekodkan bait ASCII tinggi dengan entiti angka, memastikan rentetan itu boleh dihuraikan dengan betul walaupun dengan pengehadan ISO-8859-1 ( PHP 8.2 sahaja).

Contoh

Berikut ialah contoh menggunakan pengisytiharan meta charset:

$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>';
$dom = new DOMDocument();

// Add meta charset declaration
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$dom->loadHTML($contentType . $profile);

echo $dom->saveHTML();
Salin selepas log masuk

Ini akan memuatkan rentetan HTML dengan pengekodan UTF-8 yang betul , mengekalkan aksara Jepun asal.

Atas ialah kandungan terperinci Mengapakah fungsi PHP DOMDocument loadHTML saya tidak mengendalikan pengekodan UTF-8 dengan betul?. 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