Можно ли использовать некодированные амперсанды ( & ) в html? [дубликат]


На этот вопрос уже есть ответ здесь:

Я создаю веб-сайт, где мне приходится работать с менее совершенными masterdata (думаю, я не единственный: -))

В моем случае я должен отрисовать XML-файл в html (используя xsl). Иногда masterdata использует html-enitites allready (например, é во французских словах) поэтому там я должен использовать 'disable-output-escaping= 'yes'), чтобы избежать двойного кодирования.

Самое простое решение-отключить вывод, экранирующий все вместе, поэтому я никогда не рискую двойным кодированием.

Единственными символами, которые пропускают кодировку для этих основных данных, являются амперсанды. Но когда я разбираю их "сырыми" (так что скорее&, чем & все браузеры, кажется, в порядке с этим.

Итак, вопрос : каковы последствия использования не закодированных амперсанд в HTML?

3 9

3 ответа:

AFAIK голые амперсанды запрещены в HTML. Оставив это в стороне, давайте посмотрим на последствия:

  • Теперь вы полагаетесь на возможности браузера, чтобы обнаружить и изящно восстановить проблему. Обратите внимание, что для этого браузер должен угадать: является" явно " амперсандом, за которым следует пробел, и © явно является символом авторского права. Но как насчет фрагмента текста edit&copy? Браузер, который я использую прямо сейчас, искажает его.
  • Если вы использование XHTML, или если содержимое когда-либо будет вставлено в XML-документ, результатом будет жесткая ошибка синтаксического анализатора.

Поскольку обнаружить и учесть эти случаи вручную сложнее, чем заменить все амперсанды, которые не являются частью сущностей (скажем, регулярным выражением), вы действительно должны сделать последнее.

Это зависит

Лучшие исследования, которые я видел на эту тему, можно найти здесь

В HTML5 вы должны экранировать все амперсанды, которые не попадают в следующие категории:

Неоднозначный амперсанд-это символ амперсанда U+0026 ( & ), который далее следует один или несколько символов в диапазоне U+0030 цифра ноль (0) К U+0039 цифра девять (9), U+0061 Латинская маленькая буква A К U+007A латинская буква Маленькая буква Z и U+0041 Латинская заглавная буква A к U + 005A ЛАТЫНЬ Заглавная буква Z, за которой следует символ точки с запятой U+003B (;), где эти символы не совпадают ни с одним из имен, приведенных в названии раздел ссылки на персонажей.

Смотрите Действительно ли мне нужно кодировать ' & 'как'&'?

Резюмируем: Да, вы можете, но строго говоря, это не законно (за исключением HTML5, где это законно, пока это не "похоже" на сущность персонажа).