2013-03-05 26 views
5

Trong trang web của tôi khi biểu mẫu được gửi với không gian được nhập trong trường văn bản, nó được đọc dưới dạng% 20 trong mã phụ trợ thay vì không gian. Tôi có thể thay thế% 20 trở lại "" trong backend nhưng tôi nghĩ rằng nó không phải là cách tiếp cận đúng và nó có thể xảy ra bất cứ nơi nào trong ứng dụng.Thông số URL Java thay thế% 20 bằng không gian

Có cách nào tốt hơn để xử lý nó trong giao diện người dùng khi bạn gửi biểu mẫu không?

+1

Không có gì sai khi nhận '% 20'. Bạn có thể: 'URL = URL.replaceAll ("% 20 "," ");' – Maroun

+1

url = url.value.replace ("% 20", ""); –

+1

Không có cách nào tốt hơn. Đây là mã hóa web HTTP chuẩn - Bạn nên muốn nó ở định dạng này. Đung vậy. Vui lòng xem tài liệu mã hóa này từ W3C để biết chi tiết. http://www.w3schools.com/tags/ref_urlencode.asp – ninnemannk

Trả lời

16

Đó là không có gì sai với điều đó. Đó là cách các ký tự được thoát trong một URL. Bạn nên sử dụng URLDecoder, trong đó đặc biệt thích hợp bởi vì, mặc dù tên của nó, nó application/x-www-form-urlencoded giải mã:

String decoded = URLDecoder.decode(queryString, "UTF-8"); 

Sau đó, bạn sẽ có thể xây dựng một bản đồ của cặp khóa/giá trị phân tích các phần truy vấn của URL , tách trên & và sử dụng = để tách khóa khỏi giá trị (cũng có thể là null).

Tuy nhiên, lưu ý rằng nếu URL được chuyển thành đối tượng URI, thì nó có một số đẹp getQuery() đã trả lại văn bản chưa thoát.

Nếu bạn sử dụng API servlet, bạn không phải thoát khỏi bất kỳ điều gì vì có các phương pháp tốt đẹp như getParameterMap().

+0

Có khả năng khung bạn sử dụng ở phía máy chủ làm cho mọi thứ có sẵn theo một số tham số * params *. UTF-8 trong ví dụ của tôi phục vụ vì bộ giải mã phải biết bộ ký tự '% 20' đề cập đến. "* Yêu cầu URL hiện tại đã là UTF-8 *" Tôi không biết chính xác nghĩa là gì ... – Raffaele

+0

Dòng yêu cầu (có chứa phần sau máy chủ) chỉ có thể chứa một tập con của các ký tự ASCII. Ngoài ra, một số ký tự đặc biệt và phải được thoát. Ngoài ra, mọi ký tự bên ngoài danh sách trắng phải được thoát bằng cách sử dụng '% XX' - Xem [RFC 2396] (http://www.ietf.org/rfc/rfc2396.txt) – Raffaele

+0

Không có gì là * Bộ ký tự UTF-8 *. Có bộ mã Unicode và UTF-8 là một lược đồ mã hóa. API Java được sử dụng trong câu trả lời của tôi yêu cầu lược đồ xây dựng các ký tự từ các octet. – Raffaele

4
try { 
     String result = URLDecoder.decode(urlString, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
Các vấn đề liên quan