Перед созданием новой темы, пожалуйста, ознакомьтесь с FAQ по LinkorCMS

Регистр в поиске

Супер пользователь
Сообщений: 87
Здравствуйте!
Я обратил внимание, что в поиске учитывается регистр букв. Например, у меня на сайте есть статья «Скрип тормозов». Если ввести в поиске «скрип тормозов» с маленькой буквы, как все обычно и делают, поиск ничего не выводит. А вот если написать с большой буквы, поиск сразу показывает эту статью.
Как сделать поиск регистронезависимым?
Разработчик
Сообщений: 605
Вообще там используется регистронезависимая функция поиска. Попробуйте в файле /base/inc/system/search.php заменить stristr() на mb_stristr(). После этого удалить старое ядро в папке /config/.
Супер пользователь
Сообщений: 87
Мартин, спасибо вам огромное, я заменил по вашему совету, теперь поиск выводит всё отлично!
Супер пользователь
Сообщений: 125
Так же не находит если стоит пробел в начале, но возвращает уже без пробела и второй раз нажатие на поиск все находит!
Разработчик
Сообщений: 605
Пробел вырезает вызов функции trim() из функции SafeDB(), которая подготавливает данные к выводу (в функции IndexSearchMain(). Но это не страшно, пробел в текущей реализации поиска бесполезен. Так как алгоритм поиска - это разбить поисковый запрос на слова (строка разбивается на массив строк путем деления по по проблему) и искать вхождение любого полученного слова. Если функции mb_stristr() передать пустую строку, то будет PHP Warning.

На этом фоне я бы посоветовал еще в файле /modules/search/index.php найти строчку:

<?
$searchstr = $_GET['searchstr'];
?>


и заменить на:

<?
$searchstr = trim($_GET['searchstr']);
?>


Ей фильтрация особо не к чему (в запросах к базе, к сожалению, не участвует и так далее. по ней лишь ищется вхождение), но такая небольшая будет полезна.
Разработчик
Сообщений: 605
Более корректно вообще проверить локаль, а не менять на mb_* аналоги. Если вызов setlocale(LC_ALL, LOCALE) дает false, значит, локаль не устанавливается. Находится эта константа в файле /config/config.php. Можно для начала попробовать установить ее как 'ru_RU'. Список установленных локалей в unix получается через locale -a | grep ru_RU.
Гости не могут отвечать на темы. Войдите или Зарегистрируйтесь.
Здесь присутствуют
(пользователей: 0, гостей: 1)
Быстрый переход: