2012-06-08 3 views
2

Я хочу, чтобы закодировать часть URL в JAVA параметра ЯEncode параметры URL с помощью Java

http://statebuild-dev.com/iit-title/size.xml?id=(102T OR 140T) 

в

http://statebuild-dev.com/iit-title/size.xml?id=(102%20OR%20140) 

попытались использовать URI для кодирования, но он также кодирует? которого я не хочу. В URL я хочу, чтобы закодировать часть после «=»

URI uri = new URI("http", 
    "statebuild-dev.com/iit-title", "/size.xml?id=(102 OR 140)", null); 
//URL url = uri.toURL(); 
System.out.println(uri.toString()); 
System.out.println(url1); 

Спасибо

ответ

1

This answer имеет хорошее обсуждение кодирования различных частей URI/URL. Вы на правильном пути, но ваша конкретная проблема в том, что у вас разные части URI. Вы должны использовать конструктор из нескольких частей, который принимает власть, путь, запрос и фрагмент:

URI uri = new URI("http", "statebuild-dev.com", "/iit-title/size.xml", "id=(102 or 104)", null); 
System.out.println(uri.toString()); 
System.out.println(uri.toASCIIString()); 
+0

нет, вы хотите кодировать параметры запроса до добавив их в URL. URI не будет обрабатывать это для вас. – jtahlborn

+0

@jtahlborn Неправильный код ошибки? Он производит точно желаемый результат в соответствии с исходным вопросом. – Alex

+0

Что произойдет, если ваш параметр запроса «(A = B)»? – jtahlborn

1

Вы использовали неправильный конструктор. Попробуйте это:

URI uri = new URI("http","statebuild-dev.com", "/iit-title/size.xml", "id=(102 OR 140)", null); 

Смотрите также java.net.URLEncoder

+0

Это неправильно, он производит «http: /statebuild-dev.com/iit-title/size.xml? Id = (102% 20or% 20104)». statebuild-dev.com - это авторитет, а не часть пути. – Alex

+1

вы не хотите использовать URI для кодирования, вы хотите использовать URLEncoder. – jtahlborn

+0

uoooops, вы правы –

0

java.net.URI класс может помочь; в документации по URL-адресу вы найдете

Примечание. В некоторых случаях класс URI выполняет экранирование его полей компонентов. Рекомендуемым способом управления кодированием и расшифровкой URL-адресов является использование URI

Проверьте это thread.

+0

нет, URI - неправильное решение этой проблемы. – jtahlborn

+1

Итак, еще одно решение - [Apache Commons Codec] (http://commons.apache.org/codec/apidocs/org/apache/commons/codec/net/URLCodec.html) –

2

вы хотите использовать URLEncoder для кодирования каждого параметра запроса перед добавлением в URL, например:

String encodedValue = URLEncoder.encode("(102 OR 140)", "UTF-8"); 
+0

Возможно, перехитрить в этой ситуации, но хороший подход для общего случая. URLEncoder кодирует HTML-форму, которую по умолчанию обрабатывает большинство серверов. – Alex

+0

Пробовал. Он кодирует его как (102 + OR + 140). Но я хочу его как (102% 20OR% 20140) – SUM