Зачем нужны символьные объекты HTML? - PullRequest
10 голосов
/ 19 июня 2009

Зачем нужны объекты символов HTML? Чем они хороши? Я не вижу смысла.

Ответы [ 6 ]

22 голосов
/ 19 июня 2009

Две главные вещи.

  1. Они позволяют использовать символы, которые не определены в текущей кодировке. Например, вы можете легально использовать ASCII в качестве кодировки и по-прежнему включать произвольные символы Unicode в сущности.
  2. Они позволяют вам цитировать символы, которым HTML придает особое значение, как заметил Саймон.
14 голосов
/ 19 июня 2009

"1 &lt; 2" позволяет добавить "1 < 2" на вашу страницу.

Длинный ответ:

Поскольку HTML использует '<' для открытия тегов, вы не можете просто набрать '<', если хотите использовать его в качестве текста. Поэтому у вас должен быть способ сказать: «Я хочу текст < на моей странице». Кто бы ни разрабатывал HTML (или, собственно, SGML, предшественника HTML), решил использовать '& что-то ;', так что вы также можете поставить такие вещи как неразрывный пробел: '&nbsp;' (пробелы которые не свернуты или допускают разрыв строки). Конечно, теперь у вас должен быть способ сказать «&», чтобы вы получили «&amp;» ...

7 голосов
/ 19 июня 2009

Они не являются, кроме &amp;, &lt;, &gt;, &quot; и, вероятно, &nbsp;. Для всех остальных символов просто используйте UTF-8.

4 голосов
/ 20 июня 2009

В SGML и XML они не только для символов. Они представляют собой общий механизм включения, и их использование для специальных символов является лишь одним из многих случаев.

<!ENTITY signature "<hr/><p>Regards, <i>&myname;</i></p>">
<!ENTITY myname "John Doe">

Этот вид сущностей бесполезен для веб-сайтов, поскольку они работают только в режиме XML, и вы не можете использовать внешний файл DTD, не включив режим проверки в конфигурации браузера.


Сущности могут быть расширены рекурсивно. Это позволяет использовать XML для атаки типа «отказ в обслуживании» под названием «Billion Laughs Attack».


Firefox использует сущности внутренне (в XUL и так далее) для интернационализации и независимых от бренда сообщений (чтобы упростить жизнь Flock и IceWeasel):

<!ENTITY hidemac.label "Hide &brandShortName;">
<!ENTITY hidewin.label "Hide - &brandShortName;">

В HTML вам просто нужны &lt;, &amp; и &quot;, чтобы избежать неясностей между текстом и разметкой.

Все остальные сущности в основном устарели из-за кодировки Unicode и остаются только для удобства (но хороший текстовый редактор должен иметь макросы / фрагменты, которые могут их заменить).


В XHTML все сущности, кроме базовых, проблематичны, потому что не будут работать с автономными парсерами XML (например, &nbsp; не будет работать).

Для синтаксического анализа всех сущностей XHTML требуется проверка синтаксического анализатора XML (параметр обычно называется «разрешить внешние данные»), который медленнее и требует настройки каталога DTD. Если вы проигнорируете или испортите свой каталог DTD, вы будете участвовать в DDoS на серверах W3C .

3 голосов
/ 19 июня 2009

Символьные объекты используются для представления символов, которые зарезервированы для написания HTML-кода для .ex. <,>, /, & и т. д., если вы хотите представить эти символы в вашем контенте, вам следует использовать символьные объекты, это поможет анализатору различать содержимое и разметку

1 голос
/ 19 июня 2009

Вы используете сущности, чтобы помочь анализатору различить, когда символ должен быть представлен в виде HTML, и что вы действительно хотите показать пользователю, поскольку HTML зарезервирует для себя специальный набор символов.

Ввод буквально в HTML

Я не это имел в виду

приведет к исчезновению тега "",

, например

Я не это имел в виду

как HTML не имеет тег, определенный как таковой. В этом случае использование объектов позволит правильно отображать текст.

, например

Нет, правда! & Lt; / сарказм & GT;

дает

Нет, правда!

по желанию.

...