URL url= new URL("http://example.com/query?q=random word £500 bank $");
URI uri = new URI(url.getProtocol(), url.getUserInfo(), IDN.toASCII(url.getHost()), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String correctEncodedURL=uri.toASCIIString();
System.out.println(correctEncodedURL);
Bản in
http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$
Có chuyện gì đang xảy ra ở đây?
1. Chia URL thành các phần cấu trúc. Sử dụngjava.net.URL
cho nó.
2. Mã hóa từng phần cấu trúc đúng cách!
3. Sử dụng IDN.toASCII(putDomainNameHere)
để Punycode mã hóa tên máy chủ!
4. Sử dụng java.net.URI.toASCIIString()
để mã hóa phần trăm, mã hóa NFC được mã hóa - (tốt hơn sẽ là NFKC!). Để biết thêm thông tin, hãy xem: Cách mã hóa chính xác URL này
Trong một số trường hợp, nên kiểm tra xem url đã được mã hóa chưa . Đồng thời thay thế các không gian được mã hóa '+' bằng các không gian được mã hóa '% 20'.
Dưới đây là một số ví dụ cũng sẽ hoạt động đúng
{
"in" : "http://نامهای.com/",
"out" : "http://xn--mgba3gch31f.com/"
},{
"in" : "http://www.example.com/‥/foo",
"out" : "http://www.example.com/%E2%80%A5/foo"
},{
"in" : "http://search.barnesandnoble.com/booksearch/first book.pdf",
"out" : "http://search.barnesandnoble.com/booksearch/first%20book.pdf"
}, {
"in" : "http://example.com/query?q=random word £500 bank $",
"out" : "http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$"
}
Giải pháp vượt qua khoảng 100 trong số các testcase được cung cấp bởi Web Plattform Test .