WordPress и кодировка в плагине relevanssi
Для тех, кто не в курсе, плагин Relevanssi — довольно хорошая альтернатива стандартному поиску WP. В дефолтном поиске куча глупостей и несуразностей, взять хотя бы то, что результаты сортируются не по релевантности а по дате (!!!). Вообщем, меня такая шняга не устраивала и я полез смотреть, что же колелктивный разум написал полезного в этом направлении.
Я не буду описывать все мытарства и муки поиска адекватного плагина, скажу сразу результат — с первого раза завелся и вполне меня устроил плагин Relevanssi. Вполне себе добротный плагин, есть подсветка найденного, можно даже переопределять веса разных элементов поста (скока веса давать заголовку, скока меткам, скока except’у, скока самому контенту и пр.).
Вообщем, поставил я его, настроил и забыл. А там такая фишка есть — можно вести логи запросов поиска, ну я эту фишку включил естественно. Чрз пару недель захожу посмареть, чтож чаще всего ищут. И хуякс — облом (( В статистике показываюца одни кракозябры :( Что-то вроде такой вот паебени:
При этом, поиск работает вполне себе нормально. Полез в БД, туда, где логи запросов хранятся, а там вообще полный пиздец:
Полез в настройки БД, думал, у меня где-то просочился предательский latin1, аннет! везде стоял православный utf-8. Полез в код плагина — искал, может где там задается кодировка при сохранении логов…
Нашел это место, но никаких кодировок там небыло. Только была одна функция — htmlentities(). Она все, что можно преобразовать в html-мнемоники, преобразует. Ну, думаю, полезно, да, чтоб всяких инъекций не втыкали… Потом вчитываюсь в описание функции:
Необязательный третий аргумент charset определяет кодировку, используемую при преобразовании. Поддержка этого аргумента была добавлена в PHP 4.1.0. По умолчанию в настоящее время используется кодировка ISO-8859-1.
А это ИСО — как раз и есть latin1 !!!!1111одинодин
Где-где, а тут я ну никак не ожидал такого подвоха от обычной казалось бы функции. Но главное — мы нашли где косяк, процесс исправления как обычно занимает 10 секунд, в отличии от процесса поиска косяка. Добавляем третий параметр к функции:
$query = htmlentities($query, ENT_QUOTES, 'UTF-8');
Удаляем предыдущую стату, ищем по-новой, проверяем и — вуаля, у нас русская правильная стата!
Аминь!
Отлично, полезная статья. Исправить косяк, действительно получилось легче, чем его найти. С подобным багом встречался при работе с какой-то функцией в JS, она ответ в UTF-8 возвращала по умолчанию, а на странице была выставлена windows-1251.
[Ответить]
Спасибо!
Помогло в другом плагине.
[Ответить]
» довольно простой и понятный. Если вы при публикации записи заполняете поле «Цитаты», то эта опция будет работать. В противном случае создание своих цитат плагином Relevanssi будет очень долгим и непродуктивным. Но вы можете попробовать ее включить, если записей на сайте еще не очень много – до 100-150 штук. Опция ограничения результатов. Пригодится, если сайт имеет несколько тысяч страниц. Действительно – какой посетитель будет перелистывать более 500 результатов поиска? Нужно иметь огромное терпение или совсем не иметь серого вещества, чтобы заниматься этим. Поэтому 100, максимум – 200 результатов – вполне приемлемо.
[Ответить]