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);
พิมพ์
http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$
เกิดอะไรขึ้นที่นี่
1.แยก URL ออกเป็นส่วนโครงสร้าง ใช้java.net.URL
สำหรับมัน
2. เข้ารหัสส่วนโครงสร้างอย่างถูกต้อง!
3.ใช้IDN.toASCII(putDomainNameHere)
ในการPunycodeเข้ารหัสชื่อโฮสต์!
4.ใช้java.net.URI.toASCIIString()
การเข้ารหัสเปอร์เซ็นต์เข้ารหัส Unicode Unicode - (ดีกว่าน่าจะเป็น NFKC!) สำหรับข้อมูลเพิ่มเติมดู: วิธีการเข้ารหัส URL นี้อย่างถูกต้อง
ในบางกรณีขอแนะนำให้ตรวจสอบว่ามีการเข้ารหัส URL แล้วหรือไม่ นอกจากนี้ให้แทนที่ช่องว่างที่เข้ารหัส '+' ด้วยช่องว่างที่เข้ารหัส '% 20'
นี่คือตัวอย่างบางส่วนที่สามารถทำงานได้อย่างถูกต้อง
{
"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$"
}
วิธีการแก้ปัญหาผ่านไปประมาณ 100 ของ testcases ที่ได้รับจากการทดสอบเว็บ Plattform