Ada solusi mewah yang melibatkan penggunaan browser itu sendiri untuk mencoba mengurai teks, mengidentifikasi jika ada node DOM yang dibuat, yang akan… lambat. Atau ekspresi reguler yang akan lebih cepat, tetapi… berpotensi tidak akurat. Ada juga dua pertanyaan yang sangat berbeda yang muncul dari masalah ini:
T1: Apakah string berisi fragmen HTML?
Apakah string bagian dari dokumen HTML, berisi markup elemen HTML atau entitas yang dikodekan? Ini dapat digunakan sebagai indikator bahwa string mungkin memerlukan pemutihan / sanitasi atau dekode entitas:
/</?[a-z][^>]*>|(\&(?:[\w\d]+|#\d+|#x[a-f\d]+);/
Anda dapat melihat pola ini digunakan terhadap semua contoh dari semua jawaban yang ada pada saat penulisan ini, ditambah beberapa… contoh teks yang dihasilkan WYSIWYG atau Word yang agak mengerikan dan berbagai referensi entitas karakter.
Q2: Apakah string merupakan dokumen HTML?
The spesifikasi HTML mengejutkan longgar untuk apa yang dianggap sebuah dokumen HTML . Peramban berusaha sangat keras untuk mengurai hampir semua teks sampah sebagai HTML. Dua pendekatan: pertimbangkan semua HTML (karena jika dikirimkan dengan text/html
Jenis Konten, upaya besar akan dilakukan untuk mencoba menafsirkannya sebagai HTML oleh agen pengguna) atau mencari penanda awalan:
<!DOCTYPE html>
Dalam istilah "pembentukan yang baik", itu, dan hampir tidak ada hal lain yang "diperlukan". Berikut ini adalah 100% lengkap, dokumen HTML valid penuh yang berisi setiap elemen HTML yang menurut Anda sedang dihilangkan:
<!DOCTYPE html>
<title>Yes, really.</title>
<p>This is everything you need.
Ya. Ada aturan eksplisit tentang bagaimana membentuk "hilang" unsur-unsur seperti <html>
, <head>
, dan <body>
. Meskipun saya merasa agak lucu bahwa penyorotan sintaks SO gagal mendeteksi itu dengan benar tanpa petunjuk eksplisit.