Dotaz:
String[] par = URLDecoder.decode(s,"utf-8").split("=");
neni bezpecnejsi udelat rozdeleni podle rovnitka uz pred dekodovanim?
Teoreticky by mohl byt v klici znak rovnitka, tudiz by doslo k chybne
interpretaci. Tj.
String sss[] = s.split("=")
String par0 = URLDecoder.decode(sss[0],"utf-8");
String par1 = URLDecoder.decode(sss[1],"utf-8");
LZ
Dne 20. říjen 2008 11:15 Martin Kuba <[EMAIL PROTECTED]> napsal(a):
> 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
> --------------------------------------------------------------
>
>
--
Lukas Zapletal
http://lukas.zapletalovi.com