2012-06-27 4 views
9

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

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

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

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

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

+0

У вас действительно неловкая ситуация, с которой приходится иметь дело - мои симпатии.Можете ли вы предварительно обработать основные данные перед преобразованием XSL? Вы можете заменить любые голые амперсанды на '&', используя простое регулярное выражение, чтобы нормализовать ввод до того, как он попадет в XSL. –

+0

@Peter в наши дни возможно для айзера в одностороннем порядке закрыть вопрос в виде дубликата. Я предлагаю сделать это. –

+0

@Mark Я получил уведомление о вашем комментарии, я думаю, что статус сейчас в порядке? – Peter

ответ

8

AFAIK обнаженные амперсанды незаконны в HTML. С учетом этого, давайте посмотрим на последствия:

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

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

+1

браузеру не нужно * угадывать *, поскольку для этого есть спецификация, по крайней мере, в HTML5 – Razor

7

Это зависит?

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

в HTML5 вы должны избежать все амперсандов, которые не попадают в категории ниже:

Неоднозначный амперсанд является U + 0026 амперсанда (&), который следуют один или более символов в диапазоне U + 0030 ЦИФРА НОЛЬ (0) к U + 0039 СИМВОЛЬНЫЙ девять (9), U +0061 ЛАТИНСКОЕ МАЛОЕ ПИСЬМО от A до U + 007A LATIN МАЛЕНЬКАЯ ПИСЬМА Z и U + 0041 ЛАТИНСКОЕ КАПИТАЛОВОЕ ПИСЬМО от A до U + 005A LATIN CAPITAL LETTER Z, за которым следует символ U + 003B SEMICOLON (;), где эти символы не соответствуют ни одному из названий, указанным в разделе имен ссылок .

+0

Matthias Bynens, автор связанного сообщения, является грозным и очень активным разработчиком. Любой интересный вопрос, который у вас есть о крайних случаях спецификаций HTML, ECMAScript и CSS, есть значительный шанс, что Маттиас написал об этом в педантичной детали, как он это сделал. –

4

См Do I really need to encode '&' as '&'?

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

+0

спасибо, что указали URL-адрес – Peter