Можно ли использовать некодированные амперсанды ( & ) в html? [дубликат]
На этот вопрос уже есть ответ здесь:
Я создаю веб-сайт, где мне приходится работать с менее совершенными masterdata (думаю, я не единственный: -))
В моем случае я должен отрисовать XML-файл в html (используя xsl). Иногда masterdata использует html-enitites allready (например, é
во французских словах) поэтому там я должен использовать 'disable-output-escaping= 'yes'), чтобы избежать двойного кодирования.
Самое простое решение-отключить вывод, экранирующий все вместе, поэтому я никогда не рискую двойным кодированием.
Единственными символами, которые пропускают кодировку для этих основных данных, являются амперсанды. Но когда я разбираю их "сырыми" (так что скорее&, чем &
все браузеры, кажется, в порядке с этим.
Итак, вопрос : каковы последствия использования не закодированных амперсанд в HTML?
3 ответа:
AFAIK голые амперсанды запрещены в HTML. Оставив это в стороне, давайте посмотрим на последствия:
- Теперь вы полагаетесь на возможности браузера, чтобы обнаружить и изящно восстановить проблему. Обратите внимание, что для этого браузер должен угадать:
&
является" явно " амперсандом, за которым следует пробел, и©
явно является символом авторского права. Но как насчет фрагмента текстаedit©
? Браузер, который я использую прямо сейчас, искажает его.- Если вы использование 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, где это законно, пока это не "похоже" на сущность персонажа).