Dotaz ohledne kodovani

Honza Pazdziora adelton na informatics.muni.cz
Pondělí Červenec 27 12:51:21 MEST 1998


> 
> Potreboval bych vedet, jak muzu udelat, aby klicove slovo, ktere bylo
> zadano od uzivatele mohlo byt prevedeno na kodovoani US-ASCII, tj. aby
> vyhledavani ignorovalo jakoukoliv diakritiku. Jinak mi nastava problem

Automaticky to nepujde -- neco jako /i na diakritiku neumime a ani
v locales pro to podpora neni.

> typu:
>  uzivatel zada vyhledat slovo programovani (s kratkym "a" a "i"), ale ja
> v souboru odkazu ma napsano programovani (s dlouhym "a" a "i"). A kdyz

Reseni, ktere nejakou dobu vcelku uspesne pouzivame, je rozsirit
uzivatelem zadane slovo o vsechny diakriticke moznosti. Cili mam

	$vstup = "programovani";

Udelam

	$vstup =~ s/a/[aá]/g;
	$vstup =~ s/i/[ií]/g;
	$vstup =~ s/e/[eéě]/g;

a spoustu dalsich radku a pak ten vstup pouziji jako regularni vyraz:

	$line =~ /$vstup/;

Predtim je ale vhodne ten $vstup prohnat nejakym \Q, aby ten regularni
vyraz nepadal.

Seznam tech substituci je samozrejme lepsi prepsat jako

	s/([aeio...])/$EXPAND{$1}/g;

a ten hash %EXPAND si predtim naplnit vhodnymi retezci. Pokud to
chcete nejak automatizovat, tak v modulu Cz::Cstocs je funkce
diacritic_char, ktera vraci seznam zdiakritikovanych znaku k danemu
znaku v danem kodovani -- da se vyuzit.

Druha moznost je mit udelany index v US-ASCII, vstup prevest taky do
US-ASCII a pak to matchovat pomoci index. Ale zalezi.

Pokud je to velka vec a mate to v databazi, muzete mi pomoct
s napsanim UDF do MySQL, ktera by takovehle matchovani delala nejak
automatizovane, i s vyuzitim indexu ;-)

------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
                   I can take or leave it if I please
------------------------------------------------------------------------


Další informace o konferenci Perl