Символы E и Ё при поиске для сp1251

Символы E и Ё при поиске для сp1251

В кодировке cp1251 базы данных символы E и Ё считаются разными, а в utf-8 они считаются одинаковыми. Этот хак позволит исправить это и символы E и Ё будут считаться одинаковыми при поиске новостей с сайта.


Установка:
1. Открыть engine/ajax/search.php и найти:
$query = $db->safesql( htmlspecialchars ( trim(  strip_tags (convert_unicode( $_POST['query'], $config['charset'] ) ) ), ENT_QUOTES, $config['charset']) );

Заменить на:
$query = $db->safesql( htmlspecialchars ( trim(  strip_tags ( $_POST['query']) ), ENT_QUOTES, $config['charset']) );

Найти далее:
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");

Заменить на:
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci OR full_story LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci OR xfields LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci OR title LIKE _utf8 '%{$query}%' COLLATE utf8_general_ci) ORDER by date DESC LIMIT 5");

2. Открыть engine/modules/search.php и найти:
// Поиск по ключевым словам

Добавить ниже:
$story = mb_convert_encoding($story, 'utf-8', "cp1251");

Найти далее:
$titleonly_where = array ('0' => "MATCH(title,short_story,full_story,xfields) AGAINST ('{story}' IN BOOLEAN MODE)", // Искать только в статьях

Заменить на:
$titleonly_where = array ('0' => "MATCH(title,short_story,full_story,xfields) AGAINST (_utf8 '{story}' COLLATE utf8_general_ci IN BOOLEAN MODE)", // Искать только в статьях

Найти далее (2 РАЗА):
'3' => "title LIKE '%{story}%'" ); // Искать только в заголовках статей

Заменить на:
'3' => "title LIKE _utf8 '%{story}%' COLLATE utf8_general_ci" ); // Искать только в заголовках статей

Найти далее:
$titleonly_where = array ('0' => "short_story LIKE '%{story}%' OR full_story LIKE '%{story}%' OR xfields LIKE '%{story}%' OR title LIKE '%{story}%'", // Искать только в статьях

Заменить на:
$titleonly_where = array ('0' => "short_story LIKE _utf8 '%{story}%' COLLATE utf8_general_ci OR full_story LIKE _utf8 '%{story}%' COLLATE utf8_general_ci OR xfields LIKE _utf8 '%{story}%' COLLATE utf8_general_ci OR title LIKE _utf8 '%{story}%' COLLATE utf8_general_ci", // Искать только в статьях

Готово!
 
Версия DLE: 11.х
Кодировка: win-1251
Автор: PunPun
Источник
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.