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

Odpovedet emailem