Почему RSS не может обрабатывать амперсанд?

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

Самая запутанная вещь заключается в том, что если вы преобразуете & в &, все будет хорошо, хотя ваша альтернатива все еще содержит характер проблемы.

Почему RSS не работает при отображении символа амперсанда (&) по умолчанию?

Ответ 1

Когда "сырой" и видимый, интерпретатор ищет одну из допустимых экранированных и последовательностей (например, '&'). Когда найдена неправильная последовательность, она выдает ошибку. Это все, что нужно.

Ответ 2

Поскольку rss - это формат на основе XML, а в xml амперсанд (&) означает начало объекта xml. Парсер ожидает чего-то еще.

Вы можете утверждать, что он должен быть достаточно умным, чтобы знать, что амперсанд в "Sanford & Sons" является просто амперсандом. Но как насчет того, когда вы действительно хотите показать амперсанд с текстом? Является ли "&pc; некоторой пользовательской (также недействительной) сущностью или должен ли она интерпретировать это как амперсанд? Что насчет "&"?

Ответ 4

Поскольку RSS - это XML, а XML требует, чтобы некоторые символы были экранированы, например амперсанд.

Ответ 5

и является остатком корней XML в SGML. Там &...; синтаксис используется для того, чтобы избежать всякого рода вещей, даже целых документов для внедрения. Поэтому, если вы хотите использовать литерал "&" вы должны избежать этого. Это то же самое, что использовать кавычки внутри строк на любом языке программирования.

Нет никакой пользы в том, чтобы позволить XML делать некоторую коррекцию ошибок типа "Если нет следующей буквы, выведите литерал &", потому что это сломает синтаксис SGML XML, как сказано, на основе.

В большинстве браузеров это делается в HTML, потому что они сказали, что пользователям лучше видеть любую вещь, чем ошибка синтаксического анализа SGML. Но это открывает совершенно новую коробку Pandora, браузер которой делает какие-то исправления ошибок. Посмотрите на спецификацию HTML5, и вы увидите, что значит действительно определять обработку ошибок. Это много текста.

Один специальный случай: вы можете включать литерал "&" в XML/RSS, если вы вложите его в так называемый раздел "CDATA". Это будет выглядеть следующим образом:

< элемент > <! [CDATA [ Смит и Вессон ]] > </элемент >

Приветствия,

Ответ 6

Это сильно зависит от клиента RSS, но, скорее всего, он пытается XML-декодировать содержимое (в вашем примере "Sanford and Sons" ). Когда это произойдет, и указывается беглый символ. Если вы не используете &amp; по мере его декодирования, он попытается использовать следующие несколько символов для завершения escape-последовательности. Скорее всего вероятность того, что он потерпит неудачу.

Ответ 7

Не уверен, что это помогает, но когда мне нужно было решить эту проблему, я использовал числовую сущность ref для амперсанда, которая есть & Запускает это через валидатор w3c, так что я предполагаю, что это нормально использовать.

Приветствия