Jeste bych doplnil nekolik veci:
a) Nikde v URL neni napsano, ze parametry maji podoby nazev=hodnota.
URL je z principu z principu jednojednoznacny identifikator, jehoz syntaxe
je strukturovana na maximalne ctyri casti, a v zadne z nich neni o parametrech
ani carka, natoz pismenko
b) I kdyby melo platit, ze & je oddelovac, uvedomme si, ze & ' a " patri mezi
tzv. extra znaky, ktere nejsou ani cisla ani pismena, ale nemusi se escapovat.
Proto se muze stat, ze se nekdo rozhodne poslat retezec v uvozovkach a bude
predpokladat, ze uvozovky uvozuji nedelitelny retezec. A pokud ten obsahuje
&, Makubuv parser nebude fungovat.
c) co se tyka kodovani, plati to, Makud napsal - UTF-8 se pouze predpoklada.

Existuje samozrejme ustalene pouzivani parametru v HTTP schematu pro URL
a na to Makubuv parser v pohode staci. Nemuzete v to ale verit. Vzdy je
nejlepsi se bud drzet specky (tedy jak se ma chovat request.getParameter())
nebo nechat parsovani na zakaznikovi. Ten ale nejlip vi, jak to ma vypadat
a parser je pak velice trivialni.

Prectete si http://www.w3.org/Addressing/URL/5_BNF.html, zajimave cteni...

Oto 'tapik' Buchta

On Mon, Oct 20, 2008 at 11:15:57AM +0200, Martin Kuba wrote:
> Lukáš Zapletal napsal(a):
> > Zdravim,
> > 
> > potreboval bych najit v Java Core API kod, ktery mi z URI.getQuery
> > (resp. getRawQuery) vrati nejakou mapu nebo neco, abych si mohl cist
> > jednotlive parametry. Nechce se mi to (parser) psat, nebo pouzit cizi
> > kod. Vim, ze je to trivialni, ale musely by se napsat testy a zcela
> > jiste by to nejaky cas trvalo. Urcite to nekde uz je hotove (minimalne
> > v Servlet API), jen bych potreboval nasmerovat, kde :-)
> 
> K tomuto jednu poznámku - není definováno, jak jsou parametry odděleny,
> takže taková metoda nemůže být univerzální.
> 
> RFC 3986 definující URI parametry nedefinuje.
> 
> Ve specifikaci HTML je uvedeno, že prohlížeče mají data z HTML formulářů
> posílat ve tvaru parametr=hodnota oddělené znakem &
> (viz http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4)
> ale ve stejné specifikaci je na jiném místě napsáno,
A
> že parametry předávané v URI by měly používat něco jiného
> než &, nejlépe středníky ;, viz
> http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.2.2
> 
> Z tohoto zmatku vyplynulo, že server-side frameworky používají
> jako oddělovač &, protože to posílají prohlížeče z formulářů
> předávaných GET. Ale jsou vývojáři (třeba u nás vývojáři IS MU),
> kteří používají v URL jako oddělovač zásadně středníky
> (parsují parametry totiž ručně v Perlu).
> 
> Čili nelze se obecně spolehnout na to, že parametry v URI
> budou mít určitý oddělovač. Pokud se rozhodnete, že chcete
> povolit jenom ampersandy, pak by mělo stačit
> 
> 
>     public static HashMap<String, String> parseURIQuery(URI uri) throws 
> UnsupportedEncodingException {
>         HashMap<String,String> map = new HashMap<String, String>();
>         String ss = uri.getQuery();
>         for(String s: ss.split("&")) {
>             String[] par = URLDecoder.decode(s,"utf-8").split("=");
>             map.put(par[0],par.length>1?par[1]:"");
>         }
>         return map;
>     }
> 
>     public static void main(String[] args) throws URISyntaxException, 
> UnsupportedEncodingException {
> 
>         URI uri = new URI("http://www.neco.cz/hu?a=1&b=c+2%20d&d";);
> 
>         HashMap<String, String> map = parseURIQuery(uri);
> 
>         System.out.println("map = " + map);
>     }
> 
> Jo, ještě taky URI nemají definováno kódování, ale utf-8 je doporučeno.
> 
> 
> Makub
> -- 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Supercomputing Center Brno             Martin Kuba
> Institute of Computer Science    email: [EMAIL PROTECTED]
> Masaryk University             http://www.ics.muni.cz/~makub/
> Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
> --------------------------------------------------------------
> 


Odpovedet emailem