ОБСУДИТЬ ПРОЕКТ
EN RU
Контакты
Напишите нам

Спасибо, что обратились к нам!

Ваше сообщение отправлено и в ближайшее время мы его рассмотрим и постараемся ответить

Модуль slick_rss. Ошибки при выводе ленты

На прошедшей неделе один из заказчиков попросил разобраться с багом, выскакивающем при выводе RSS ленты на сделанном им сайте. Для вывода ленты использовался модуль slick_rss для Joomla 1.5. При выводе выскакивали ошибки вида «XML Error. Illegal character on line …..».
Модуль slick_rss. Ошибки при выводе ленты
На прошедшей неделе один из заказчиков попросил разобраться с багом, выскакивающем при выводе RSS ленты на сделанном им сайте. Для вывода ленты использовался модуль slick_rss для Joomla 1.5. При выводе выскакивали ошибки вида «XML Error. Illegal character on line …..».

На прошедшей неделе один из заказчиков попросил разобраться с багом, выскакивающем при выводе RSS ленты на сделанном им сайте. Для вывода ленты использовался модуль slick_rss для Joomla 1.5. При выводе выскакивали ошибки вида «XML Error. Illegal character on line …..».

Первым делом, лента была проверена валидаторами RSS. Валидаторы показали предупреждения, касающиеся структуры документа, однако никаких сообщений о неверных символах показано не было.

Далее была проанализирована сама лента сайта, в ней в указанной строка были обнаружены апострофы, на которых и «спотыкался» модуль.

Анализ модуля показал, что никаких встроенных классов для разбора RSS лент он не содержит, вместо этого он использует класс SimplePie, включенный в состав Joomla. Именно этот класс и выполняет всю работу. Сначала казалось невероятным что столь широко используемый  класс не имеет обработки спецсимволов и на сайт была выгружена его последняя версия. Нечего не изменилось :(

Тогда было придумано решение, из за которого и пришлось написать этот пост. Модуль slick_rss написан как фронт-энд к классу SimplePie, он получает из параметров,установленных в админ панели адрес ленты и передает его классу. Затем возвращенные им разобранные результаты с использованием шаблонов модуля выводятся на фронт-энд. Нашей целью было получение содержимого ленты в модуле, удаление спецсимволов и передаче очищенных данных классу.

Для этого, файл helper.php модуля был приведен к следующему виду:

$file = new SimplePie_File($rssurl);
$body = $file->body;
$body = str_replace(array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d",
"\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"), array("'", "'", '"', '"', '-',
'--', '...'), $body);
$feed = new SimplePie();
$feed->set_raw_data($body);

Кроме того, из файла tmpl/default.php был атрибут title=»", использование которого могло бы привести к конфликтам и неправильному отображению при работе.

В результате до разбора содержимого ленты из нее удаляются спецсимволы Юникода, что позволяет избежать ошибок при разборе и выводе.

Ссылки по теме:

  • http://www.toao.net/48-replacing-smart-quotes-and-em-dashes-in-mysql
  • http://www.mail-archive.com/[email protected]/msg00114.html
гарантии

гарантии

  • 10 лет на международном рынке
  • Внутренние стандарты качества
  • AGILE - методики планирования разработки
  • Передовые методики управления проектами с помощью JIRA
  • Налаженный производственный цикл от планирования и прототипирования до ручного и автоматического тестирования
посмотреть сертификаты отзывы наших клиентов
ГЛАВНОЕ В УСПЕШНОМ ИНТЕРНЕТ-ПРОЕКТЕ
это подобрать надежного и профессионального подрядчика с полным циклом услуг
заполнить бриф