Какая функция в PHP покажет равенство строк: "fóm" и "fom"

*
1
*
✩
Использую 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) ) )
(убираем заодно все символы, кроме букв и цифр)
php sqlite utf строка
7 месяцев 15 дней назад

#ссылка не по теме? tweet сохранить
комментировать



*
0
*
Работа с диакритикой возможна несколькими путями.
Один из них вы озвучили, однако в нем есть существенные минусы - трик с глобальной транслитерацией диакритики в латиницу. И мне кажется что этот вариант напрямую зависит от сервера и его настроек. В том числе и от наличия 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() - Вычисляет степень похожести двух строк
#ссылка не по теме?
7 месяцев 15 дней назад
RayZ
[3008]
soundex() и soundex() вроде как к английскому относятся? а там получается, что язык может быть вообще какой угодно. Про metaphone() и similar_text() не знаю, надо почитать, спасибо. Простая замена конечно лучше всего, но я смутно представляю сколько этих спецбукв (языков много не потому, что суперглобальный проекто, а наоборот - названия фильмов, где редко, но метко попадаются такие буквы). На счет mb_strtolower - так он тут и не нужен, случайно у меня оказался. Он был еще до того, как мне такие буквы попались, т.е. параметр был в UTF-8, а в представленном варианте после iconv уже никакой mb_strtolower не нужен. – sprava 7 месяцев 15 дней назад
Все эти символы в целом обозначены как "диакритика". Такой вопрос, как у вас поднимался. Я только что читал статьи, найденные по запросу "диакритика php". Там рассматривают вопросы как транслитерации в целом, так и упоминают перечни символов. Подскажите, какого рода статьи вы анализируете (или может быть будет правильно спросить - на каком яыке), что у вас есть надобность анализировать такого рода символы? – RayZ 7 месяцев 15 дней назад
даже будет правильно спросить - для какой цели вы делаете такую транслитерацию? Какая подоплека? Есть же большая вероятность того, что "упростив" символы до латиницы потеряется смысл слова на другом языке вообще ;) Так к примеру "FÄM" в "балтийском" языковом сегменте будет в латинице правильно преобразовываться в "FAEM" – RayZ 7 месяцев 15 дней назад
Комментировать

Ваш Ответ:


Ваш OpenID


Получить OpenID

Что такое OpenID?
или

Логин

Email

Пароль


Будет создана учетная запись и на email выслано письмо подтверждения.


новые ответы

Первый раз на сайте?

askdev.ru — это социальный сайт вопросов и ответов для IT-специалистов: программистов, веб-дизайнеров, системных администраторов.
о сайте » регистрация »

Показан

475 раз

Задан

7 месяцев 15 дней назад

Теги
php x 397
sqlite x 9
utf x 2
строка x 3
X

Пожалуйста, войдите:


Имя:
Пароль:
регистрация
Или используйте OpenID