Часто возникают вопросы, связанные с поиском на сайте - нужен поиск без различения регистра; некорректно работает поиск с русским (украинским, латышским, ...) языком, т.е. отличающимся от английского наличием собственных символов в алфавите.
Опишу свой способ решения этих вопросов:
1. Вначале сниппета, который обрабатывает на вашем сайте данные из поисковой формы, прописываем такую директиву (кодировку можете установить свою):
mb_internal_encoding("UTF-8");
Таким образом мы установим внутреннюю кодировку символов UTF-8.
2. Во всем сниппете выбираем строковые функции и добавляем к ним приставку mb_ (мультибайтный). Таким образом у нас уже должен по идее корректно работать поиск с языками, отличными от английского.
3. Чтобы поиск стал неразборчив к регистру, необходимо перед запросом сравнения в БД привести все данные к одному регистру.
3.1. Для переменной, содержащей строку с искомыми данными, проделываем следующее:
$searchString = mb_strtolower($searchString);
т.е. приводим всю строку к нижнему регистру.
3.2. Тоже самое надо сделать с хранимыми данными в БД, с которыми будет производиться сравнение. Для этого в SQL запросе используем функцию MySQL:
LOWER.
$sql = "SELECT id, pagetitle, description, content, introtext ";
$sql .= "FROM $tbl ";
$sql .= "WHERE (LOWER(pagetitle) LIKE '%$searchString%' OR LOWER(description) LIKE '%$searchString%'
OR LOWER(content) LIKE '%$searchString%'
OR LOWER(introtext) LIKE '%$searchString%') ";
$sql .= "AND $tbl.published = 1 AND $tbl.searchable=1 AND $tbl.deleted=0;";
3.3. Выполняем $sql запрос в БД.
Собственно говоря, это все. Вопросы, комментарии - welcome