Diky za obe zajimave poznamky. Mohu kod vykopirovat a pouzit? Predpokladam, ze tento je bez chyb... ;-)
LZ Dne 20. říjen 2008 11:38 Petr Synek <[EMAIL PROTECTED]> napsal(a): > Problem navic je, ze obcas byva v URL nekolik parametru stejneho jmena s > ruznymi hodnotami (parkrat jsem se s tim uz setkal). Takze pouziti > HashMap<String name, String value> nemusi byt vzdy vhodne. > > Petr > > > 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, >> ž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 > -- Lukas Zapletal http://lukas.zapletalovi.com
