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 -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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 --------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
