Існують вигадливі рішення, які передбачають використання самого браузера для спроби синтаксичного аналізу тексту, визначаючи, чи були побудовані будь-які DOM-вузли, які будуть… повільними. Або регулярні вирази, які будуть швидшими, але ... потенційно неточними. З цієї проблеми також виникають два дуже чітких питання:
Q1: Чи містить рядок фрагменти HTML?
Чи є рядок частиною документа HTML, що містить розмітку елементів HTML або закодовані сутності? Це може бути використано як індикатор того, що рядок може вимагати відбілювання / санітарії або декодування об'єкта:
/</?[a-z][^>]*>|(\&(?:[\w\d]+|#\d+|#x[a-f\d]+);/
Ви можете бачити, як цей шаблон використовується на всіх прикладах з усіх існуючих відповідей на момент написання статті, а також деяких ... досить огидних зразків тексту, створених WYSIWYG або Word, та різноманітних посилань на сутності символів.
Q2: Чи є рядок документом HTML?
Специфікація HTML вражаюче вільна щодо того, що вона вважає документом HTML . Браузери докладають максимум зусиль, щоб проаналізувати майже будь-який текст сміття як HTML. Два підходи: або просто розглянути все HTML (оскільки, якщо воно поставляється з text/htmlContent-Type, значні зусилля будуть витрачені на спробу інтерпретувати його як HTML користувальницьким агентом), або шукати маркер префікса:
<!DOCTYPE html>
З точки зору "добре сформованості", і майже нічого іншого "не вимагається". Далі подано 100% повний, повністю дійсний HTML-документ, що містить кожен елемент HTML, який, на вашу думку, пропущено:
<!DOCTYPE html>
<title>Yes, really.</title>
<p>This is everything you need.
Так. Є чіткі правила про те , як сформувати «відсутні» елементи , такі як <html>, <head>, і <body>. Хоча мені здається досить забавним, що підсвічування синтаксису SO не вдалося правильно це виявити без явного підказки.