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);
Baskılar
http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$
Burada ne oluyor?
1. URL'yi yapısal parçalara ayırın. Bunun için kullanın java.net.URL
.
2. Her yapısal parçayı uygun şekilde kodlayın!
3. Ana makine adını kodlamak IDN.toASCII(putDomainNameHere)
için Punycode kullanın !
4.java.net.URI.toASCIIString()
Yüzde kodlamak için kullanın , NFC kodlu unicode - (daha iyi NFKC olurdu!). Daha fazla bilgi için bkz. Bu URL nasıl doğru şekilde kodlanır?
Bazı durumlarda, URL'nin zaten kodlanmış olup olmadığını kontrol etmeniz önerilir . Ayrıca '+' kodlu boşlukları '% 20' kodlu boşluklarla değiştirin.
Ayrıca düzgün çalışacak bazı örnekler
{
"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$"
}
Çözüm, Web Plattform Tests tarafından sağlanan yaklaşık 100 test senaryosundan geçmektedir .