PHP функции для исправление неправильной раскладки клавиатуры в тексте и использование их в поиске по сайту.
function switcher_ru($value)
{
$converter = array(
'f' => 'а', ',' => 'б', 'd' => 'в', 'u' => 'г', 'l' => 'д', 't' => 'е', '`' => 'ё',
';' => 'ж', 'p' => 'з', 'b' => 'и', 'q' => 'й', 'r' => 'к', 'k' => 'л', 'v' => 'м',
'y' => 'н', 'j' => 'о', 'g' => 'п', 'h' => 'р', 'c' => 'с', 'n' => 'т', 'e' => 'у',
'a' => 'ф', '[' => 'х', 'w' => 'ц', 'x' => 'ч', 'i' => 'ш', 'o' => 'щ', 'm' => 'ь',
's' => 'ы', ']' => 'ъ', "'" => "э", '.' => 'ю', 'z' => 'я',
'F' => 'А', '<' => 'Б', 'D' => 'В', 'U' => 'Г', 'L' => 'Д', 'T' => 'Е', '~' => 'Ё',
':' => 'Ж', 'P' => 'З', 'B' => 'И', 'Q' => 'Й', 'R' => 'К', 'K' => 'Л', 'V' => 'М',
'Y' => 'Н', 'J' => 'О', 'G' => 'П', 'H' => 'Р', 'C' => 'С', 'N' => 'Т', 'E' => 'У',
'A' => 'Ф', '{' => 'Х', 'W' => 'Ц', 'X' => 'Ч', 'I' => 'Ш', 'O' => 'Щ', 'M' => 'Ь',
'S' => 'Ы', '}' => 'Ъ', '"' => 'Э', '>' => 'Ю', 'Z' => 'Я',
'@' => '"', '#' => '№', '$' => ';', '^' => ':', '&' => '?', '/' => '.', '?' => ',',
);
$value = strtr($value, $converter);
return $value;
}
echo switcher_ru('
Hfcrkflrf rkfdbfnehs - cjukfitybt j cjjndtncndbb nbgjuhfabxtcrb[ cbvdjkjd
(,erd? wbah? pyfrjd ghtgbyfybz b/ l/) gbcvtyyjuj zpsrf rkfdbifv rkfdbfnehs/
');
Результат
Раскладка клавиатуры - соглашение о соответствии типографических символов
(букв, цифр, знаков препинания и. д.) писменного языка клавишам клавиатуры.
function switcher_en($value)
{
$converter = array(
'а' => 'f', 'б' => ',', 'в' => 'd', 'г' => 'u', 'д' => 'l', 'е' => 't', 'ё' => '`',
'ж' => ';', 'з' => 'p', 'и' => 'b', 'й' => 'q', 'к' => 'r', 'л' => 'k', 'м' => 'v',
'н' => 'y', 'о' => 'j', 'п' => 'g', 'р' => 'h', 'с' => 'c', 'т' => 'n', 'у' => 'e',
'ф' => 'a', 'х' => '[', 'ц' => 'w', 'ч' => 'x', 'ш' => 'i', 'щ' => 'o', 'ь' => 'm',
'ы' => 's', 'ъ' => ']', 'э' => "'", 'ю' => '.', 'я' => 'z',
'А' => 'F', 'Б' => '<', 'В' => 'D', 'Г' => 'U', 'Д' => 'L', 'Е' => 'T', 'Ё' => '~',
'Ж' => ':', 'З' => 'P', 'И' => 'B', 'Й' => 'Q', 'К' => 'R', 'Л' => 'K', 'М' => 'V',
'Н' => 'Y', 'О' => 'J', 'П' => 'G', 'Р' => 'H', 'С' => 'C', 'Т' => 'N', 'У' => 'E',
'Ф' => 'A', 'Х' => '{', 'Ц' => 'W', 'Ч' => 'X', 'Ш' => 'I', 'Щ' => 'O', 'Ь' => 'M',
'Ы' => 'S', 'Ъ' => '}', 'Э' => '"', 'Ю' => '>', 'Я' => 'Z',
'"' => '@', '№' => '#', ';' => '$', ':' => '^', '?' => '&', '.' => '/', ',' => '?',
);
$value = strtr($value, $converter);
return $value;
}
echo switcher_en('
Ф лунищфкв дфнщге шы фтн ызусшашс ьусрфтшсфдб мшыгфдб щк агтсешщтфд фккфтпуьуте
ща еру луныб дупутвыб щк лун-ьуфтштп фыыщсшфешщты (куызусешмудн) ща ф сщьзгеукю
');
Результат
A keyboard layout is any specific mechanical, visual, or functional arrangement
of the keys, legends, or key-meaning associations (respectively) of a computer.
Самый простой способ – искать сразу по всем вариантам:
$search = 'Gjbcrjdjq pfghjc';
$search_ru = switcher_ru($search);
$search_en = switcher_en($search);
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("
SELECT
*
FROM
`prods`
WHERE
(`name` LIKE '%{$search}%' OR `text` LIKE '%{$search}%')
OR (`name` LIKE '%{$search_ru}%' OR `text` LIKE '%{$search_ru}%')
OR (`name` LIKE '%{$search_en}%' OR `text` LIKE '%{$search_en}%')
");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
Второй – по условию отсутствии результатов.
$search = 'Gjbcrjdjq pfghjc';
$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `name` LIKE '%{$search}%' OR `text` LIKE '%{$search}%'");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
if (empty($result)) {
$search_ru = switcher_ru($search);
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `name` LIKE '%{$search_ru}%' OR `text` LIKE '%{$search_ru}%'");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
if (empty($result)) {
$search_en = switcher_en($search);
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `name` LIKE '%{$search_en}%' OR `text` LIKE '%{$search_en}%'");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
}
}
var_dump($result);
Ошибка в switcher_en: Должно быть: