Могу ли я безопасно пропустить строку с символами HTML выше Unicode 127, если я использую UTF-8? - PullRequest
6 голосов
/ 09 февраля 2011

При выводе строки в HTML по понятным причинам необходимо экранировать специальные символы в виде сущностей HTML ("& <>" и т. Д.).

Я рассмотрел две реализации этого на Java: org.apache.commons.lang.StringEscapeUtils.escapeHtml (String) net.htmlparser.jericho.CharacterReference.encode (CharSequence)

Оба экранируют все символы выше кодовой точки Unicode 127 (0x7F), которая фактически является всеми неанглийскими символами.

Это нормальное поведение, но строки, которые он генерирует, не читаются человеком, когда символы не являются английскими (например, на иврите или арабском языке). Я видел, что когда символы выше Unicode 127 не экранируются подобным образом, они по-прежнему корректно отображаются в браузерах - я полагаю, это потому, что HTML-страница имеет кодировку UTF-8, и поэтому эти символы понятны для браузера.

Мой вопрос: Могу ли я безопасно отключить экранирование символов Юникода выше кодовой точки 127 при экранировании сущностей HTML, если моя веб-страница имеет кодировку UTF-8?

Ответы [ 2 ]

5 голосов
/ 09 февраля 2011

Вам необходимо использовать HTML-объекты только в двух случаях:

  • Для экранирования символа, который имеет особое значение в HTML (например, <)
  • Для отображения символакоторый не относится к кодировке документа (например, символ в документе ISO-8859-1)

Учитывая, что UTF-8 может представлять все символы Unicode, применяется только первый случай.

При вводе HTML вручную может оказаться целесообразным время от времени вставлять HTML-сущность, если ваш редактор и / или клавиатура не позволяет вводить определенный символ (проще просто набрать &copy;, чемпытаясь понять, как ввести фактический ©), но при автоматическом экранировании текста вы просто увеличиваете размер страницы; -)

Я мало знаю о Java, но другие языки имеют разные функции для кодирования специальных символов и все возможныеюридические лица.

4 голосов
/ 09 февраля 2011

Если вы отправите кодировку в заголовке mime-type:

Content-Type: text/html; charset=utf-8

, то браузер будет интерпретировать ваш источник как UTF-8, и вы можете отправить все эти символы как обычноБайты в кодировке UTF-8.

Кроме того, вы можете указать кодировку в заголовке вашей HTML-страницы следующим образом:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

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

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

Обновление: HTML 5 добавил новый синтаксис для указания кодировки :

<meta charset="utf-8">
...