Autor Zpráva
Johny_5
Profil *
Dobrý den,
chci se zeptat jak to udělat aby vyhledal název jak s diakritikou, tak i bez ní? Děkuji

Jak to mám ted, tak ignoruje velikosti textu, ale né diakritiku :-(
LOWER(description) LIKE '%".mb_strtolower(mysql_real_escape_string($_GET["description"]))."%'
AM_
Profil
Johny_5:
chci se zeptat jak to udělat aby vyhledal název jak s diakritikou, tak i bez ní?
kdo, co?

Jak to mám ted, tak ignoruje velikosti textu, ale né diakritiku :-(
kdo, co?

obecně - diakritiku musíš osekat, nejlépe v databázi mít uloženou verzi bez diakritiky (nevím o tom, že by MySQL funkcí šla odstranit) a v PHP se dá odstranit pomocí strtr (v manuálu) je na to i příklad). Pokud budeš porovnávat bez diakritiky, tak ji to de facto ignoruje.
Johny_5
Profil *
To mě taky napadlo, ale doufal jsem, že je na to nějaká funkce :-) Děkuju
Johny_5
Profil *
Jak, ale vytáhnout vysledek s db na porovnání? Šlo by to nějak takhle?

$GLOBALS = array(
    'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A',
    'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I',
    'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U',
    'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a',
    'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i',
    'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u',
    'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f'
);


LOWER(".strtr(description, $GLOBALS).") LIKE '%".mb_strtolower(mysql_real_escape_string($_GET["description"]))."%'

To jsem ted vytvořilnějakou .....,ne?
Johny_5
Profil *
Jsem to testnul, ale nehlásí ani chybu ani nezobrazuje vysledky :-) Dal jsem to i do vysledků GET, ale nefunguje mi to.
miskith
Profil
zkus použít na konci SQL:

 COLLATE utf8_general_ci

Já jsem to používal a fungovalo to ;)
AM_
Profil
nevím, jestli je rozumné si pole $GLOBALS přepsat převodní tabulkou :) raději použij jinou proměnnou.

Johny_5:
strtr(description, $GLOBALS)
toto dělá co? description je nějaká konstanta? navíc sloupec v mysql, který porovnáváš v mysql, nemůžeš modifikovat PHP funkcí, jestli se snažíš o to...
jak říkám, předgeneruj si sloupec třeba description_nodiak, kde bude popis bez diakritiky, a porovnávej proti němu...
AM_
Profil
[#6] miskith
jenže on řeší, jak porovnávat bez diakritiky, ne kódovou stránku, s diakritikou mu to jestli jsem dobře pochopil funguje...
ninja
Profil
AM: za použití
 COLLATE utf8_czech_ci
to hledá obě verze (s i bez diakritiky).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: