Ответ 1
Когда "сырой" и видимый, интерпретатор ищет одну из допустимых экранированных и последовательностей (например, '&'
). Когда найдена неправильная последовательность, она выдает ошибку. Это все, что нужно.
Когда я сталкиваюсь с сломанным RSS-каналом, обычная причина, по которой все его раздувает, состоит в том, что в строке 23 говорится "Сэнфорд и сыновья".
Самая запутанная вещь заключается в том, что если вы преобразуете &
в &
, все будет хорошо, хотя ваша альтернатива все еще содержит характер проблемы.
Почему RSS не работает при отображении символа амперсанда (&
) по умолчанию?
Когда "сырой" и видимый, интерпретатор ищет одну из допустимых экранированных и последовательностей (например, '&'
). Когда найдена неправильная последовательность, она выдает ошибку. Это все, что нужно.
Поскольку rss - это формат на основе XML, а в xml амперсанд (&) означает начало объекта xml. Парсер ожидает чего-то еще.
Вы можете утверждать, что он должен быть достаточно умным, чтобы знать, что амперсанд в "Sanford & Sons"
является просто амперсандом. Но как насчет того, когда вы действительно хотите показать амперсанд с текстом? Является ли "&pc;
некоторой пользовательской (также недействительной) сущностью или должен ли она интерпретировать это как амперсанд? Что насчет "&"
?
Потому что это должно быть экранировано синтаксисом XML. Та же причина здесь.
Поскольку RSS - это XML, а XML требует, чтобы некоторые символы были экранированы, например амперсанд.
и является остатком корней XML в SGML. Там &...; синтаксис используется для того, чтобы избежать всякого рода вещей, даже целых документов для внедрения. Поэтому, если вы хотите использовать литерал "&" вы должны избежать этого. Это то же самое, что использовать кавычки внутри строк на любом языке программирования.
Нет никакой пользы в том, чтобы позволить XML делать некоторую коррекцию ошибок типа "Если нет следующей буквы, выведите литерал &", потому что это сломает синтаксис SGML XML, как сказано, на основе.
В большинстве браузеров это делается в HTML, потому что они сказали, что пользователям лучше видеть любую вещь, чем ошибка синтаксического анализа SGML. Но это открывает совершенно новую коробку Pandora, браузер которой делает какие-то исправления ошибок. Посмотрите на спецификацию HTML5, и вы увидите, что значит действительно определять обработку ошибок. Это много текста.
Один специальный случай: вы можете включать литерал "&" в XML/RSS, если вы вложите его в так называемый раздел "CDATA". Это будет выглядеть следующим образом:
< элемент > <! [CDATA [ Смит и Вессон ]] > </элемент >
Приветствия,
Это сильно зависит от клиента RSS, но, скорее всего, он пытается XML-декодировать содержимое (в вашем примере "Sanford and Sons" ). Когда это произойдет, и указывается беглый символ. Если вы не используете &
по мере его декодирования, он попытается использовать следующие несколько символов для завершения escape-последовательности. Скорее всего вероятность того, что он потерпит неудачу.
Не уверен, что это помогает, но когда мне нужно было решить эту проблему, я использовал числовую сущность ref для амперсанда, которая есть & Запускает это через валидатор w3c, так что я предполагаю, что это нормально использовать.
Приветствия