2011-10-02 13 views

Trả lời

3

Tôi đã thử nghiệm một vài thư viện, bao gồm di sản hiện tại URIUtil của HTTPClient mà không cảm thấy tôi đã tìm thấy bất kỳ giải pháp khả thi nào. Thông thường, tôi đã có đủ thành công với loại cấu trúc java.net.URI này mặc dù:

/** 
* Tries to construct an url by breaking it up into its smallest elements 
* and encode each component individually using the full URI constructor: 
* 
* foo://example.com:8042/over/there?name=ferret#nose 
* \_/ \______________/\_________/ \_________/ \__/ 
*  |   |   |   |  | 
* scheme  authority  path  query fragment 
*/ 
public URI parseUrl(String s) throws Exception { 
    URL u = new URL(s); 
    return new URI(
     u.getProtocol(), 
     u.getAuthority(), 
     u.getPath(), 
     u.getQuery(), 
     u.getRef()); 
} 

có thể được sử dụng kết hợp với quy trình sau đây. Nó liên tục giải mã một số URL cho đến khi chuỗi được giải mã không thay đổi, có thể hữu ích đối với ví dụ: mã hóa kép. Lưu ý, để đơn giản, mẫu này không có bất kỳ hình thức nào không an toàn, v.v.

public String urlDecode(String url, String encoding) throws UnsupportedEncodingException, IllegalArgumentException { 
    String result = URLDecoder.decode(url, encoding); 
    return result.equals(url) ? result : urlDecode(result, encoding); 
} 
1

Tôi khuyên bạn không nên sử dụng java.net.URLEncoder để mã hóa phần trăm URI. Mặc dù cái tên, nó không phải là rất tốt cho mã hóa URL như nó không làm theo các tiêu chuẩn rfc3986 và thay vào đó mã hóa sang định dạng application/x-www-form-urlencoded MIME (read more here)

Đối với mã hóa URI trong Scala Tôi muốn giới thiệu lớp Uri từ phun http. scala-uri là một thay thế (tuyên bố từ chối trách nhiệm: Tôi là tác giả).

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