Re: problem s cestinou v PHP/Mysql

From: Jana Kucerova (juk@juk.cz)
Date: 01. 03. 2002, 11:06 CET


> Ahoj,
> resim jeden zapeklity problem:
>
> V MySQL databazi mam ulozena data, ktera jsou v cestine s diakritikou. V
PHP
> mam vytvoreny vyhledavaci script, ktery hleda ve vsech polich tabulky
> databaze. Bunky jsou typu LongText. Problem je s vyhledanim ceskych slov,
> resp. slov, ktera obsahuji nektere specificke ceske znaky s diakritikou.
> Potrebuji aby vyhledavani nebylo case-sensitive ... to funfuje az na toto:
>
> pri hledani retezce "JIŘÍ" nebo "jiří" najde to same,.. to je OK.
> pri hledani retezce "ŠIMON" nebo "šimon" najde jine vysledky (v prvnim
> pripade vsechny Šimony s velkym Š a v druhem všechny s malym š)
>
> Vypada to, ze ma MySQL problem jen s některými českými znaky, protože "ř"
> funguje a "š" ne.
>
> Dale bych potreboval, aby vyhledavani fungovalo i tak, ze mi to najde
napr.
> vsechny "Jiří" i kdyz zadam hledany retezec bez diakritiky... to znamena
> "jiri".
>
> Muzete prosim poradit co s tim? Je treba do MySQL neco doinstalovat pro
> podporu CZ? Pouzil jsem nevhodny typ LongText? Delam neco spatne?
>
> Diky moc,.. je to trochu zamotane
>
> Yd.
>

Dobry den,
ja ve svych projektech pouzivam nasledujici kontrukci.
Slouzi k vyhledavani bez ohledu na diakritiku.

Neni to moc rychle, ale nastesti fulltextove prohledavani
prispevku se casto zase tak nepouziva.

Ve skriptech pozivam toto volani:

"SELECT polozky FROM tabulka WHERE ".Odcesti($searchtext, 'nazevsloupecku')

A funkce Odcesti vypada takto:

<? function Odcesti($slovo,$nazevsloupce)
{

$exp = explode(" ", strtolower($slovo));
$query = implode("%", $exp);

$query=StrTr($query,
"\xC1\xC8\xCF\xC9\xCC\xCD\xBC\xD2\xD3\xD4\xD8\x8A".
"\x8D\xDA\xD9\xDD\x8E\xE1\xE8\xEF\xE9\xEC\xED".
"\xBE\xF2\xF4\xF3\xF8\x9A\x9D\xFA\xF9\xFD\x9E",
"acdeeilnoorstuuyzacdeeilnoorstuuyz");

return " LOWER(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE($nazevsloupce,
'\xC1','a'),'\xC8','c'),'\xCF','d'),'\xC9','e'),'\xCC','e'),
'\xCD','i'),'\xBC','l'),'\xD2','n'),'\xD3','o'),'\xD4','o'),
'\xD8','r'),'\x8A','s'),'\x8D','t'),'\xDA','u'),'\xD9','u'),
'\xDD','y'),'\x8E','z'),'\xE1','a'),'\xE8','c'),'\xEF','d'),
'\xE9','e'),'\xEC','e'),'\xED','i'),'\xBE','l'),'\xF2','n'),
'\xF4','o'),'\xF3','o'),'\xF8','r'),'\x9A','s'),'\x9D','t'),
'\xFA','u'),'\xF9','u'),'\xFD','y'),'\x9E','z')) like '%$query%'";
}?>

Jana Kucerova
juk@centrum.cz
http://www.juk.cz/php/
Odkazy k PHP a MySQL na ceskem a slovenskem internetu.



This archive was generated by hypermail 2.1.2 : 01. 03. 2002, 11:05 CET