В чем разница между UTF-8 и HTML-сущностями? - PullRequest
8 голосов
/ 18 мая 2010

В чем разница между UTF-8 и HTML-сущностями?

Ответы [ 5 ]

4 голосов
/ 18 мая 2010

UTF-8 - это схема кодирования для кодирования на уровне байтов.

HTML-сущности обеспечивают способ выражения многих символов в стандарте (обычно ASCII)пространство символов.Это также делает их более читабельными для человека читаемыми, когда UTF-8 недоступен.

Основная цель HTML-сущностей сегодня - убедиться, что текст, похожий на HTML, отображается как текст.Например, операторы «Меньше» или «Больше чем» (< или >) при размещении в определенном порядке (т. Е. ) могут случайно отображаться как HTML, когда они должны были отображаться как текст.

3 голосов
/ 19 мая 2010

«А», которое вы видите здесь на экране, на самом деле не сохраняется как «А» в компьютере, это скорее последовательность из 1 и 0. Набор символов или кодировка определяет способ кодирования символов таким способом. Набор символов ASCII включает только несколько символов, которые он может кодировать, почти исключительно ограничиваясь символами английского языка. Но по историческим причинам и техническим ограничениям времени это был набор символов интернета (очень рано).

Как UTF-8, так и объекты HTML могут использоваться для кодирования символов, которые не являются частью ASCII. Сущности HTML достигают этого, придавая особое значение специальным последовательностям символов. Используя его, вы можете кодировать символы, не охватываемые ASCII, используя только символы ASCII. UTF-8 (Unicode) делает то же самое, просто расширяя набор символов для включения большего количества символов. HTML-сущности «допустимы» только в среде, где вы пытаетесь их декодировать, как правило, в браузере. Символы UTF-8 являются универсальными в любом приложении, которое поддерживает набор символов.

Текст, содержащий только символы, охватываемые ASCII:

Price: $20 (UTF-8)
Price: $20 (ASCII с сущностями HTML)

Текст, содержащий европейские символы, не включенные в ASCII:

Beträge: 20€ (UTF-8)
Beträge: 20€ (ASCII с сущностями HTML)

Текст, содержащий азиатские символы, скорее всего, не охваченный ASCII:

値段:二千円 (UTF-8)
値段:二千円 (ASCII с сущностями HTML)

Проблема с UTF-8 заключается в том, что клиент должен понимать UTF-8. В течение последнего десятилетия это не вызывало беспокойства, поскольку все современные компьютеры и браузеры не имеют проблем с пониманием UTF-8. UTF-8 (Unicode) может кодировать практически все символы, используемые сегодня на этой планете (за небольшими исключениями). Используя его, вы можете работать с текстом «как есть». Абсолютно предпочтительная кодировка для сохранения текста.

Проблема с сущностями HTML в том, что нормальные символы приобретают особое значение. При написании ä оно приобретает особое значение «ä». Если вы на самом деле намереваетесь написать «& auml;», вам нужно дважды закодировать последовательность как ä.
HTML-сущности также общеизвестно, что они не читаются. Вы не хотите использовать их для кодирования «специальных» символов в обычном тексте. В этом качестве они играют роль неадекватного набора символов. Вместо этого используйте Unicode.

Важное использование сущностей HTML, которые не зависят от используемого набора символов, заключается в отделении разметки HTML от текста. HTML также придает особое значение специальным последовательностям символов. <b>text</b> - это обычная последовательность символов, но она имеет особое значение для анализаторов HTML. Если вы намеревались просто написать « text », вам необходимо закодировать его как &lt;b&gt;text&lt;/b&gt;, чтобы анализатор HTML не принял его за теги HTML.

3 голосов
/ 18 мая 2010

Смотрите UTF-8 как средство без потерь и самосинхронизации сопоставления списка натуральных чисел с потоком байтов, чтобы вы могли вернуть натуральные числа (без потерь), и если вы просто упадете «в середине» поток это не большая проблема. (Самосинхронизируются)

Каждый натуральный янтарь просто представляет собой «символ».

Сущности HTML - это способ представления этих же натуральных чисел таким образом, как: &#127;, обозначает натуральное число 127, в юникоде это символ DEL.

В UTF-8 это поток байтов: 0111 1111

Как только вы поднимаетесь выше 127, он становится более чем на один октет, поэтому 128 становится: 1000 0001 1111 1111.

Два символа DEL подряд становятся 0111 1111 0111 1111. UTF-8 спроектирован таким образом, что всегда можно получить исходный список «скалярных значений Юникода» из потока байтов, даже если поток байтов, например, из 4 октетов, может отображать от 1 до 4 различных таких скаляров. ценности. UTF-8, таким образом, «переменной длины», как они его называют.

2 голосов
/ 18 мая 2010

тонну Сущности HTML в первую очередь предназначены для того, чтобы экранировать HTML-разметку, чтобы ее можно было отображать в HTML (не путать отображение с выводом). Например, &gt; выводит>, а> закрывает тег. Хотя вы можете создавать полный Юникод с HTML-сущностями, он очень неэффективен и совершенно уродлив.

UTF-8 - это многобайтовая кодировка для Unicode, которая описывает, как отображать символы за пределами классической кодовой страницы ASCII в США, не прибегая к переключению кодовых страниц и не пытаясь смешивать кодовые страницы. Одна кодовая точка (воспринимается как символ, хотя это не совсем правильно) может состоять из 6 байтов данных. Он предназначен для представления любых символов внутри и за пределами базовой многоязычной плоскости (BMP), таких как акцентированные символы, восточно-азиатские символы, а также кельтское дерево (Ogham) среди других наборов символов.

0 голосов
/ 18 мая 2010

UTF-8 - это кодировка, htmlentities - это функция, позволяющая сделать ввод данных пользователем безопасным для отображения на странице, чтобы теги HTML не добавлялись непосредственно в разметку. См. руководство .

...