2015-12-16 1 views
0

Строка URL может быть очень динамичной. Он может иметь любое количество и комбинацию параметров. Например:Как заменить определенные «&» в строке URL для разбора

myHost?parm1=Data1&parm2=Data2&parm3=Data3 

Большинство парсинга может быть реализован просто отлично в этом сценарии, но что, если сами данные содержит «&». Например:

myHost?parm1=Data1&1b&parm2=Data2&2b&parm3=Data3&3b 

Использование StringTokenizer или URLEncoder это процесс все или ничего. Поскольку имена параметров могут отличаться, они не могут использоваться как часть поиска. Значение имен пары должны быть разбиты с данными, содержащими «&» должно быть как таковые:

parm1=Data1&1b 
parm2=Data2&2b 
parm3=Data3&3b 

Любой рекомендация Java на реализацию для достижения этой цели?

ответ

3

& в строковых значениях запроса должно быть % -кодировано, as %26. В вашем примере, они должны выглядеть так:

parm1=Data1%261b 
parm2=Data2%262b 
parm3=Data3%263b 

Так оно и должно быть легко разделить правильно закодированный URL, просто по &.

При создании URL-адреса клиентская программа должна URL-кодировать каждое значение параметра. Затем отформатируйте URL, соединяя ключ и (закодированное) значение на =, и список пар ключ-значение на &. Если клиентская программа не кодирует URL-значения параметров, то программа сервера не сможет отличить встроенный & от разделителя значений &.

+0

Означает ли это, что пользователь должен ввести% 26, когда данные содержат «&», но затем использовать «&» в других местах URL? –

+0

Клиентская программа должна кодировать '&' правильно – janos

+0

Все, что я видел, по существу, делает все или ничего типа кодирования, и когда это будет сделано, вы по-прежнему не можете различать «&» внутри данных и '&, который разделяет данные. –

0

В Java есть утилита, которая кодирует URL-адреса для вас (java.net.URLEncoder), и она должна позаботиться о замене амперсанда.
Here - это аналогичный пост для вашего.

Кроме того, вы можете прочитать около articles, которые дают некоторые советы по кодированию URL.

+0

Я видел этот пример и, если не пропустил что-то, что обработает все символы «&», а не только те, которые связаны с данными. –