Wordpress и кодировка в плагине relevanssi

Для тех, кто не в курсе, плагин Relevanssi - довольно хорошая альтернатива стандартному поиску WP. В дефолтном поиске куча глупостей и несуразностей, взять хотя бы то, что результаты сортируются не по релевантности а по дате (!!!). Вообщем, меня такая шняга не устраивала и я полез смотреть, что же колелктивный разум написал полезного в этом направлении.

Я не буду описывать все мытарства и муки поиска адекватного плагина, скажу сразу результат - с первого раза завелся и вполне меня устроил плагин Relevanssi. Вполне себе добротный плагин, есть подсветка найденного, можно даже переопределять веса разных элементов поста (скока веса давать заголовку, скока меткам, скока except’у, скока самому контенту и пр.).

Вообщем, поставил я его, настроил и забыл. А там такая фишка есть - можно вести логи запросов поиска, ну я эту фишку включил естественно. Чрз пару недель захожу посмареть, чтож чаще всего ищут. И хуякс - облом (( В статистике показываюца одни кракозябры :( Что-то вроде такой вот паебени: bnopnya При этом, поиск работает вполне себе нормально. Полез в БД, туда, где логи запросов хранятся, а там вообще полный пиздец: bnopnya2 Полез в настройки БД, думал, у меня где-то просочился предательский latin1, аннет! везде стоял православный utf-8. Полез в код плагина - искал, может где там задается кодировка при сохранении логов…

Нашел это место, но никаких кодировок там небыло. Только была одна функция - htmlentities(). Она все, что можно преобразовать в html-мнемоники, преобразует. Ну, думаю, полезно, да, чтоб всяких инъекций не втыкали… Потом вчитываюсь в описание функции:

Необязательный третий аргумент charset определяет кодировку, используемую при преобразовании. Поддержка этого аргумента была добавлена в PHP 4.1.0. По умолчанию в настоящее время используется кодировка ISO-8859-1.

А это ИСО - как раз и есть latin1 !!!!1111одинодин

Где-где, а тут я ну никак не ожидал такого подвоха от обычной казалось бы функции. Но главное - мы нашли где косяк, процесс исправления как обычно занимает 10 секунд, в отличии от процесса поиска косяка. Добавляем третий параметр к функции:

$query = htmlentities($query, ENT_QUOTES, 'UTF-8');

Удаляем предыдущую стату, ищем по-новой, проверяем и - вуаля, у нас русская правильная стата!

Аминь!

Архив обсуждения

Исторические комментарии сохранены из старого блога. Это архив, новые комментарии не добавляются. Всего: 3.

  1. Seorubl

    Отлично, полезная статья. Исправить косяк, действительно получилось легче, чем его найти. С подобным багом встречался при работе с какой-то функцией в JS, она ответ в UTF-8 возвращала по умолчанию, а на странице была выставлена windows-1251.

  2. Андрей

    Спасибо!
    Помогло в другом плагине.

  3. Мирослава

    » довольно простой и понятный. Если вы при публикации записи заполняете поле «Цитаты», то эта опция будет работать. В противном случае создание своих цитат плагином Relevanssi будет очень долгим и непродуктивным. Но вы можете попробовать ее включить, если записей на сайте еще не очень много – до 100-150 штук. Опция ограничения результатов. Пригодится, если сайт имеет несколько тысяч страниц. Действительно – какой посетитель будет перелистывать более 500 результатов поиска? Нужно иметь огромное терпение или совсем не иметь серого вещества, чтобы заниматься этим. Поэтому 100, максимум – 200 результатов – вполне приемлемо.