В марте я установил на сайт плагин «Accelerated Mobile Pages» для отдачи страниц моего сайта в виде AMP-страниц для смартфонов, что мне долго и упорно рекомендовал сделать Гугл. А в конце прошлой осени, Яндекс анонсировал свои «Турбо-страницы», технология ускоряющая доступ к текстам на сайте со смартфона, но уже от Яндекса. Я их сначала внедрять на сайт не планировал, но раз уже подключил к сайту AMP-страницы, то решил активировать и «Турбо-страницы».
Для генерации «Турбо-страниц» для worpress'а есть несколько плагинов. Я свой выбор остановил на плагине «RSS for Yandex Turbo». Плагин небольшой, ставится и настраивается он очень просто. После его установки и настройки, добавил ссылки в панель вебмастера в Яндексе. И, через некоторое время, после проверки моих фидов у меня вывалилось несколько предупреждений: «Cодержимое Турбо-страницы не соответствует оригинальной версии (в содержимом тега найдены закодированные символы) (2 предупреждения)». За разъяснениями пришлось обратиться в службу поддержки Яндекса, ибо мне не было понятно, из-за каких символов выдаётся предупреждение.
В результате, проблема оказалась в следующем — у меня для приведения в «правильный вид» написанных заметок на сайте используется плагин «ВП Типограф Лайт». Он после публикации делает коррекцию текста — ставит неразрывные пробелы там где надо, длинное тирэ, кавычки «ёлочки» и т.п. И добавляет эти символы он с помощью html-кодов. А уже плагин «RSS for Yandex Turbo» вытаскивает и отдаёт эти символы в тексте фидов. Поэтому, чтобы устранить предупреждения выдаваемые Яндексом, надо от этих символов избавиться. Для этого, полез в исходный код и дописал замену html-кодов на обычные символы. В итоге, код плагина стал таким:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //удаляем все unicode-символы (как невалидные в rss) $content = preg_replace('/[\x00-\x1F\x7F]/u', '', $content); $content = preg_replace('/«/', '"', $content); $content = preg_replace('/»/', '"', $content); $content = preg_replace('/'/', '\'', $content); $content = preg_replace('/ /', ' ', $content); $content = preg_replace('/—/', '-', $content); $content = preg_replace('/&/', '&', $content); $content = preg_replace('/</', '<', $content); $content = preg_replace('/>/', '>', $content); //удаляем все атрибуты тега img кроме alt и src $content = yturbo_strip_attributes($content,array('alt','src')); $content = wpautop($content); |
Мои добавления в код идут за строкой «$content = preg_replace ('/[\x00-\x1F\x7F]/u', '', $content);». После этого, генерируемый фид без проблем проходит валидацию Турбо-страниц в Яндексе.
Я пробовал связаться с автором, чтобы донести эту информацию до него, возможно, что такая проблема не только у меня. Но пока не получил ответа. А чтобы при обновлениях плагина у меня мои добавления не потерялись, сохраню их в этой записи.
Привет,
Столкнулся с такой же проблемой у себя. Это проблема не плагина, а валидатора турбо страниц. Если исходная страница будет содержать код, который должен быть экранирован, то твой код приведет к XSS уязвимости во время показа страницы в браузере пользователя.
Пример, было в тексте до замены:
2
3
alert('XSS');
&lt;/script&gt;
После замены, станет нормальным JS кодом, который выполнится браузером
2
3
alert('XSS');
</script>
Так что, тем кто решит воспользоваться твоим решением, надо понимать к чему это может привести, в случае не правильного контента.
P.S. Я уже связался по этому поводу с Яндексом, жду ответа от разработчиков.
Спасибо за информацию, я за содержимым своих страницах приглядываю, чтобы подобного не случилось.