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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem