🏠 wiki
+ Přidat ✎ Upravit
↑ Programování

SELECT, diakritika, překlepy

Využít toho, že při způsobu porovnávání utf8_general_ci jsou si znaky s diakritikou i bez ní rovny. Potom stačí hledanému textu tento způsob porovnávání nastavit:
 WHERE clanek COLLATE utf8_general_ci LIKE '%$_GET[search]%' COLLATE utf8_general_ci.
Při vyhledávání bychom také měli rozlišovat, jestli uživatel používá diakritiku nebo ne. Spolehlivou informaci nám dá pouze zaškrtávací políčko, kterým uživatel svou volbu vybere, to je ale uživatelsky poměrně nepříjemné. Proto je možné hledaný text zkontrolovat – když bude obsahovat znak s diakritikou, tak uživateli nemusíme místo např. každého z hledat i ž. Pokud je text bez diakritiky, tak uživatel buď hledá slovo bez háčků a čárek nebo diakritiku nepoužívá – v tom případě raději budeme počítat s druhou variantou. Při vyhledávání s diakritikou můžeme zpřísnit i pravidla pro vyhledávání ostatních znaků – pokud uživatel hledá slovo „být“ nemusíme ho obtěžovat texty obsahujícími slovo „byt“. Jediné utf8 kódování, kde se rozlišují všechny znaky, je pouze utf8_bin, které bohužel rozlišuje velká a malá písmena, což je obvykle nežádoucí.
if (ereg("[\x80-\xFF]", $_GET["search"])) { // řetězec s diakritikou
    $where = "LOWER(clanek) LIKE LOWER('%" . mysql_real_escape_string($_GET["search"]) . "%') COLLATE utf8_bin";
} else { // řetězec bez diakritiky
    $where = "clanek LIKE '%" . mysql_real_escape_string($_GET["search"]) . "%' COLLATE utf8_general_ci";
}

Nejnavštěvovanější

SELECT, diakritika, překlepy