На время проведения реконструкции сайт переведён в режим "ТОЛЬКО ЧТЕНИЕ" (Read only). Приносим свои извинения!
MaxHub
Полезности по Maxsite CMS

Проблема с кодировкой или валидностью фида RSS

Вопросы-ответы / 1 августа 2017

Здравствуйте!

В старых версиях Maxsite сайт выдает фид в таком виде, что Google Chrome не может его нормально отобразить. На прикрепленной картинке видно, что хром не распознает тип данных и неправильно отображает кодировку. Можете сами открыть и убедиться по ссылке: http://it-dude.ru/feed

Для сравнения откройте вот этот фид: https://habrahabr.ru/rss/best/

Так должен отображаться корректный фид.

Я никак не могу понять чем отличаются эти два фида и почему хром не может правильно отобразить фид от Макссайта.

Версия Maxsite CMS 0.861

PS: Если сохранить фид макссайта как файл и открыть его в Notepad++, то этот текстовый редактор отображает содержимое корректно. Если файл файл сохранить из редактора, удалив расширение файла, то и хром начинает отображать его правильно. Подозреваю, что проблема в кодировке. Но куда копать дальше не понимаю, прошу вашей помощи.

Комментариев: 6
  1. Андрей, а попробуй изучить http-заголовки - возможно там передаётся неправильная кодировка. А потом решим, что с этим делать.

  2. Илья, спасибо за ответ!

    Посмотрел заголовки. Очень похоже, что проблема может быть в заголовке "Content-Type"

    На хабре:

    Content-Type: text/xml; charset=utf-8

    На макссайт:

    Content-Type: application/rss+xml

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

    Скрины заголовков:

    https://gyazo.com/80b673d8a1e20e492e094108421b012c

    https://gyazo.com/3696fd6c84c7099612648886b5a3f01a

  3. Нашел в папке \applicatio\maxsite\shared\type\feed четыре файла:

    category.php

    comments.php

    home.php

    page.php

    В них, в первых строках задаются заголовки:

    header('Content-type: text/html; charset=utf-8');
    header('Content-Type: application/rss+xml');

    Но если что-то меняю, то страница перестает грузится, либо ничего не меняется. Пока не понял, как правильно переделать.

  4. И непонятно, почему из этих двух заголовков хром видит только второй.

  5. В них, в первых строках задаются заголовки:

    Да, увидел. Очень странно. Так то это ошибка (ибо задаётся один и тот же параметр) - должен быть только один и с кодировкой. Всегда работает последнее объявление. По сути то, где нет кодировки.

    Но если что-то меняю, то страница перестает грузится

    Явный признак ошибки синтаксиса php - надо смотреть логи или включить вывод ошибок, чтобы проверить, что происходит.

    По идее, комментирование в начале одной из строк не должно создавать ошибки и в то же время http-заголовок должен поменяться.

    И непонятно, почему из этих двух заголовков хром видит только второй.

    Так так и должно быть - виден только последний. Так устроена работа с http-заголовками в пхп.

  6. Вроде разобрался.

    Оказалось, что заголовки для фида в старой версии Maxsite задаются в файлах:

    maxsite\templates\default\type\feed-category.php

    maxsite\templates\default\type\feed-comments.php

    maxsite\templates\default\type\feed-home.php

    maxsite\templates\default\type\feed-page.php

    Там есть строчки аналогичные приведенным выше в коментариях.

    header('Content-type: text/html; charset=utf-8');
    header('Content-Type: application/rss+xml');

    Я изменил их так:

    header('Content-type: text/xml; charset=utf-8');
    //header('Content-Type: application/rss+xml');

    Теперь Google Chrome нормально отображает фид RSS. Спасибо за подсказки!