| Rubrika Php / mysql
Diskusia k článku
Vyhľadávanie, pekné URI a diakritika
herki
03. 12. 2009, 05:15
herki 9at0 zatwor.sk
Aloha,
musim sa podakovat, velmi mi pomohol ten tip: collate 'utf8_general_ci'. Zacharnil mi dalsie hodiny hladania a skusania. Ale este som musel pred samotnym dotazom z db pouzit query:
set names utf8
lebo vysledok z DB mi hadzal v nejakom inom kodovani text nebol citatelny.
agino
02. 06. 2009, 21:40
agino [a] zoznam.sk
Čo je to pekné URI?
Pomohli by nejaké výsledky pre skripty, pre lepšie pochopenie.
naspäť
Pridať komentár
Vyhľadávanie, pekné URI a diakritika
Pri vyhľadávaní je vhodné použiť na odoslanie vyhľadávacieho formuláru metódu GET, pretože tým dáme užívateľovi možnosť skopírovať linku a odoslať ju trebárs známemu – a ten dostane presne tie isté výsledky vyhľadávania. V prípade POST metódy by to samozrejme nebolo možné. Čo však v prípade, že máme na celom webe optimalizované URI do „pekného“ tvaru a žiadny otázniky a & značky v adrese nechceme? GET metóda predáva premenné z formulára práve v URI. Ostáva teda použiť metódu POST.
Vyhľadávací formulár odošlem na rovnakú stránku, ako sa nachádza,
teda action=„<?=$_SERVER[‚REQUEST_URI‘]?>“. Pred
odoslaním akéhokoľvek výstupu mám v tomto súbore podmienku, ktorá
kontroluje, či bol odoslaný vyhľadácí formulár.
if(isset($_POST['searchString'])) { header("Location: http://www.domena.sk/vysledky-vyhladavania/".optimizeInput($_POST['searchString'])."/"); exit; }
Pokiaľ je podmienka splnená, stránku presmerúvam na výsledky vyhľadávania pričom vyhľadávaný string sa stáva súčasťou URI. Preto musí byť nejakou funkciou optimalizovaný (odstránene špeciálne znaky, diakritika, medzery prevedené na spojovníky a pod.). Výsledná adresa vyzerá asi takto:
http://www.domena.sk/vysledky-vyhladavania/vyhladavam-tento-string/
Čo s diakritikou?
V súbore, ktorý spracuje výsledky vyhľadávania si ľahko z URI
vyparsujeme vyhľadávaný string (prípadne to necháme na mod_rewrite a
.htaccess), spojovníky spätne prevedieme na medzery a môžeme vyhľadávať.
Nevýhodou je nutnosť odstrániť diakritiku a teda výsledky vyhľadávania
nemusia byť vždy celkom relevantné. Riešenia sa naskytujú dve – jedno
čistejšie a druhé menej čisté.
Čistejším riešením je používať na stránke a v databáze kódovanie
UTF-8, vďaka ktorému môžeme potom v obsahu databázy vyhľadávať tak, aby
výsledky vyhľadávania neboli závislé na diakritike. MySQL príkaz
collate 'utf8_general_ci'
sa vkladá za LIKE podmienku používanú pri vyhľadávaní (v prípade
použitia Fulltext indexu za príkaz Match). Za normálnych okolností SQL dotaz
s použitím COLLATE vráti rovnaké výsledky vyhľadávania pre slovo
s diakritikou aj pre slovo bez diakritiky (teda napr. činčila je
to isté ako cincila ;) ). Celá podmienka môže
vyzerať takto:
SELECT text FROM tabulka WHERE text LIKE '%".$string."%' COLLATE 'utf8_general_ci';
Druhou možnosťou je mať v tabuľke okrem štandardného formátovaného textu so všetkými HTML tagmi uložený aj čistý text, ktorý je bez diakritiky a akýchkoľvek nadbytočných znakov. Vyhľadáva sa potom priamo v tomto texte. Výsledok je v rovnaký ako v prípade použitia UTF-8 kódovania, ale zbytočne narastá databáza…

