2011-09-21 34 views
5

Tôi cần mã hóa các giá trị thông số trong URL. Nếu tôi sử dụng sau đây:Mã hóa các giá trị thông số trong URL bằng Java

URLEncoder.encode(url, "UTF-8"); 

cho một URL như sau: http://localhost:8080/...

nó sẽ mã hóa ": //" vv Những gì tôi cần là bảng mã duy nhất cho các giá trị của các thông số bắt đầu từ tất cả các Chuỗi URL. Vì vậy, trong trường hợp này:

http://localhost/?q=blah&d=blah

Tôi muốn mã hóa chỉ là "blah" trong các thông số giá trị 2 (đối với các thông số n tất nhiên).

Cách tốt nhất của bạn là gì?

Cảm ơn

Randomize

Trả lời

5

Bạn đang sử dụng URLEncoder trong một cách sai lầm. Bạn phải mã hóa mọi giá trị tham số riêng biệt và sau đó lắp ráp các url với nhau.

Ví dụ


String url = "http://localhost/?q=" + URLEncoder.encode ("blah", "UTF-8") + "&d=" + URLEncoder.encode ("blah", "UTF-8"); 

+0

Có, tôi biết điều đó, vấn đề là tôi có một URL đã được "thực hiện" và tôi không có cách nào để thay đổi mã tạo ra nó – Randomize

+0

Tại sao sau đó bạn cần phải mã hóa nó? Nó có chứa các ký tự không phải ASCII không? –

+1

Sau đó, bạn sẽ cần phải xây dựng một 'URL' và nhận được các thông số (hoặc tách trên'? 'Đầu tiên nếu bạn tự tin về giá trị của URL), chia chúng thành' & '(nếu bạn không muốn được mã hóa), mã hóa chúng, sau đó xây dựng lại nó. –

2

Đối với một URL như http://localhost/hello/sample?param=bla, bạn có thể sử dụng này (từ lớp java.net.URI Java):

URI uri = new URI("http", "localhost", "/hello/sample", "param=bla", null); 
String url = uri.toASCIIString(); 
+0

theo cách này bạn cần phải lắp ráp chuỗi truy vấn bằng cách sử dụng URLEncoder để mã hóa các ký tự đặc biệt. Và khi nó quay ra Randomize có toàn bộ url là đầu vào, không phải các phần của nó. –

+0

Vâng, URL có thể dễ dàng bị hỏng (chia nhỏ) thành các phần như vậy và được truyền đi. – Saket

Các vấn đề liên quan