Почему RSS не может обрабатывать амперсанд? - PullRequest
10 голосов
/ 23 июня 2009

Когда я сталкиваюсь с неработающим RSS-каналом, обычная причина, по которой он все разлетается на части, заключается в том, что в строке 23 написано «Sanford & Sons».

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

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

Ответы [ 7 ]

11 голосов
/ 23 июня 2009

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

6 голосов
/ 23 июня 2009

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

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

5 голосов
/ 23 июня 2009

Поскольку он должен быть экранирован в синтаксисе XML Та же самая причина здесь.

http://myst -technology.com / государственный / пункт / 11878

3 голосов
/ 23 июня 2009

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

Бесполезно позволять XML выполнять какое-то исправление ошибок типа "Если после буквы нет, выведите литерал &", потому что это нарушит синтаксис SGML, как сказано, на основе XML. 1003 *

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

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

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

Приветствия

2 голосов
/ 23 июня 2009

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

1 голос
/ 23 июня 2009

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

0 голосов
/ 24 августа 2010

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

Приветствия

...