Lumidan

Vyhledávání - část 2

Dneska mě osvítila báječná myšlenka - jak doimplementovat vyhledávání...
16.03.2007 v 08:39
Do dnešního dne nefungovalo vyhledávání (resp. část pro zvýrazňování) zcela korektně. Nyní již funguje. O co konkrétně jde?
Když někdo dal vyhledávat text s diakritikou, nebo bez, poslal se dotaz do databáze, který vyhledal všechny výskyty, ať už se jednalo o text s háčky nebo ne. To je způsob který jsem chtěl (a rovnou to za mě dělá MySQL), ovšem problém nastal v případě následného zvýrazňování textu (při otevření např. vyhledaného článku se zároveň předává parametr hl, který obsahuje text, který se má zvýraznit). Pokud byl hledaný text bez háčků a čárek, došlo těsně před jeho nahrazením v textu k jeho úpravě a sice tak, že všechna písmenka, která mohou obsahovat háčky, resp. čárky byla nahrazena odpovídajícím regulárním výrazem, např:
$text = mb_ereg_replace("e","[eEěéĚÉ]{1}",$text);
Pokud ovšem hledaný text obsahoval již háčky a čárky, potom nedošlo ke vložení reguláru. Bylo by potřeba ještě dodělat něco takového:
$text = mb_ereg_replace("é","[eEěéĚÉ]{1}",$text);
pro všechna písmenka. Potom by ale docházelo ke změti při dvojitém nahrazení. Toto jsem vyřešil pomocí této funkce:
function convert($string) 

   $utf8table = array ("\xc3\xa1"=>"a", 
      "xc3xa4"=>"a",   "xc4x8d"=>"c",   "xc4x8f"=>"d",   "xc3xa9"=>"e", 
      "xc4x9b"=>"e",   "xc3xad"=>"i",   "xc4xbe"=>"l",   "xc4xba"=>"l", 
      "xc5x88"=>"n",   "xc3xb3"=>"o",   "xc3xb6"=>"o",   "xc5x91"=>"o", 
      "xc3xb4"=>"o",   "xc5x99"=>"r",   "xc5x95"=>"r",   "xc5xa1"=>"s", 
      "xc5xa5"=>"t",   "xc3xba"=>"u",   "xc5xaf"=>"u",   "xc3xbc"=>"u", 
      "xc5xb1"=>"u",   "xc3xbd"=>"y",   "xc5xbe"=>"z",   "xc3x81"=>"A", 
      "xc3x84"=>"A",   "xc4x8c"=>"C",   "xc4x8e"=>"D",   "xc3x89"=>"E", 
      "xc4x9a"=>"E",   "xc3x8d"=>"I",   "xc4xbd"=>"L",   "xc4xb9"=>"L", 
      "xc5x87"=>"N",   "xc3x93"=>"O",   "xc3x96"=>"O",   "xc5x90"=>"O", 
      "xc3x94"=>"O",   "xc5x98"=>"R",   "xc5x94"=>"R",   "xc5xa0"=>"S", 
      "xc5xa4"=>"T",   "xc3x9a"=>"U",   "xc5xae"=>"U",   "xc3x9c"=>"U", 
      "xc5xb0"=>"U",   "xc3x9d"=>"Y",   "xc5xbd"=>"Z"); 
   $string =  strtr($string, $utf8table); 
   return $string; 
}
která převede písmenka s diakritikou na písmenka bez diakritiky. Tento kód není mým produktem, proto věřím, že se autor nebude zlobit za jeho zdejší zveřejnění. Sice nevím kdo to už přesně byl (ale bylo to někde na fóru http://forum.zive.cz/), budiž mu však poděkováno za tento krásný kód textu ;-).
Poznámka na závěr. Musím ještě dořešit znaky jako zpětné lomítko, které se zde nezobrazilo a to konkrétně v části funkce, kde má být toto zpětné lomítko před každým znakem x. Proto jsem si dal tu námahu a našel odkaz s touto funkcí: http://forum.zive.cz/viewtopic.php?t=59294

Komentáře

Zobrazit vše Počet příspěvků: 6 , poslední 10.05.2007 15:31:31
Re:Re:Velmi hezký článek ares952 10.05.2007 15:31:31
Re:Re:Velmi hezký článek ares952 16.03.2007 15:39:45
Re:Velmi hezký článek ares952 16.03.2007 15:39:12
Re:Velmi hezký článek ares952 16.03.2007 15:22:33
Zpetna lomitka ares952 16.03.2007 12:41:01
 Přidat komentář 
Uživatelské jméno

Heslo


Zaregistrovat


S-Rank
Google PageRank
WebRank

Jaký operační systém především používáte na svém počítači.
Windows
Windows
GNU/Linux
GNU/Linux
Mac OS
Mac OS
Unix
Unix
Jiný
Jiný
Na těchto stránkách bych uvítal více ...
Politiky
Politiky
Zábavy
Zábavy
Praktických linuxových rad
Praktických linuxových rad
Něco jiného (napíšu to do questbooku)
Něco jiného (napíšu to do questbooku)

TOPlist

optimalizace PageRank.cz
vokno - vyhledávací server s lokalizací místní i na mapách ČR od Geodézie ČS
Toplink - katalog odkazů
klikni.cz
alfa.elchron.cz

Svobodni.cz

Creative Commons License