|
Использую UTF-8 везде где только можно. База SQLite с UTF-8 (PRAGMA encoding="UTF-8"), функции для работы со строками mb_...
Все это приводит к тому, что при поиске в базе уже существующего значения, не получается найти строки с европейскими буквами, которые иногда написаны правильно, а иногда без необходимых верхних и нижних запчастей. Хотелось бы узнать какую PHP функцию использовать для дополнительного контроля полученных из SQLite данных, либо каким способом сравнивать строки в стандартном SQL-запросе: SELECT title FROM table WHERE title="$title" Спасибо. UPD: Пока придумал только довольно громоздкий вариант: $title = mb_strtolower ( preg_replace ( '#\W#', '', iconv ( 'UTF-8', 'cp866//TRANSLIT', $title) ) ) (убираем заодно все символы, кроме букв и цифр)
|
|||||||
| комментировать |
|
Работа с диакритикой возможна несколькими путями.
Один из них вы озвучили, однако в нем есть существенные минусы - трик с глобальной транслитерацией диакритики в латиницу. И мне кажется что этот вариант напрямую зависит от сервера и его настроек. В том числе и от наличия mb_string подключенного. Да и глобальная проверка через preg_replace сомнительная в плане производительности. Возможно ваш вариант можно упростить за счет существующих паттернов замен? То есть: о = [ó, ŏ, ō, ő, ơ] a = [ȧ, ā, ...] И не так что бы и много будет в итоге. Так к примеру часто используют транслитерацию русской function Translite($str){ static $tbl= array( 'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'g', 'з'=>'z', 'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p', 'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A', 'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'G', 'З'=>'Z', 'И'=>'I', 'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R', 'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h", 'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya", 'Ё'=>"YO", 'Х'=>"H", 'Ц'=>"TS", 'Ч'=>"CH", 'Ш'=>"SH", 'Щ'=>"SHCH", 'Ъ'=>"", 'Ь'=>"", 'Ю'=>"YU", 'Я'=>"YA" ); return strtr($str, $tbl); } Я особо не силен к генетическом разборе слов, однако возможно стоит копнуть в сторону ряда встроенных в PHP функций? soundex() - Возвращает ключ soundex для строки, levenshtein() - Вычисляет расстояние Левенштейна между двумя строками, metaphone() - Возвращает ключ metaphone для строки similar_text() - Вычисляет степень похожести двух строк
|
||||||
|