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 > -------------------------------------------------------------- >
