Как починить feed в wordpress когда в тексте есть «левые» символы?
This page contains the following errors:
error on line 1330 at column 37: Input is not proper UTF-8, indicate encoding !
Bytes: 0x07 0x2E 0x20 0x50
Below is a rendering of the page up to the first error.
В тексте встречаются следующие символы
’ из-за этого перестает работать Feed, есть решение без чистки текста? или может сниппет есть, который текст приведет в нормальный вид без левых символов?
Дополнительно:
Ответы:
utf8mb4 попробуйте
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Ошибка
Input is not proper UTF-8в RSS означает, что в XML попал байт или управляющий символ, который не допускается в UTF-8/XML. Символ вроде типографской кавычки’сам по себе нормальный, если база и страница действительно в UTF-8. В вашем примере подозрительнее байт0x07- это управляющий символ BEL, его в XML быть не должно.Правильный путь:
utf8mb4.Для WordPress можно добавить фильтр, который убирает запрещенные XML 1.0 символы из текста ленты:
function site_clean_feed_xml_chars($content) { if (!is_feed()) { return $content; } return preg_replace('/[^x{9}x{A}x{D}x{20}-x{D7FF}x{E000}-x{FFFD}]/u', '', $content); } add_filter('the_content_feed', 'site_clean_feed_xml_chars', 20); add_filter('the_excerpt_rss', 'site_clean_feed_xml_chars', 20); add_filter('the_title_rss', 'site_clean_feed_xml_chars', 20);
Если
preg_replace()возвращает пустоту из-за битой кодировки, сначала нормализуйте строку:function site_force_valid_utf8($content) { if (!is_feed()) { return $content; } $content = wp_check_invalid_utf8($content, true); return preg_replace('/[^x{9}x{A}x{D}x{20}-x{D7FF}x{E000}-x{FFFD}]/u', '', $content); }
Но это именно страховка на выводе. Если в БД реально лежит мусорная кодировка, лучше исправить источник: конвертировать таблицы в
utf8mb4_unicode_ci, найти проблемные записи и удалить управляющие символы из контента.