เมื่อดูที่หน้าเว็บการเข้ารหัส URL ของ W3 Schools ระบุว่า @
ควรเข้ารหัสเป็น %40
และ space
ควรเป็น เข้ารหัสเป็น %20
ฉันได้ลองทั้ง URLEncoder
และ URI
แล้ว แต่ทั้งสองอย่างข้างต้นไม่ถูกต้อง:
import java.net.URI;
import java.net.URLEncoder;
public class Test {
public static void main(String[] args) throws Exception {
// Prints me%40home.com (CORRECT)
System.out.println(URLEncoder.encode("[email protected]", "UTF-8"));
// Prints Email+Address (WRONG: Should be Email%20Address)
System.out.println(URLEncoder.encode("Email Address", "UTF-8"));
// http://www.home.com/test?Email%[email protected]
// (WRONG: it has not encoded the @ in the email address)
URI uri = new URI("http", "www.home.com", "/test", "Email [email protected]", null);
System.out.println(uri.toString());
}
}
ด้วยเหตุผลบางประการ URLEncoder
เว้นวรรคที่อยู่อีเมลอย่างถูกต้องแต่ไม่ได้เว้นวรรค และ URI
เว้นวรรคสกุลเงินแต่ไม่ได้เว้นวรรคที่อยู่อีเมล
ฉันจะเข้ารหัสพารามิเตอร์ 2 ตัวนี้ให้สอดคล้องกับสิ่งที่ w3schools บอกว่าถูกต้องได้อย่างไร (หรือ w3schools ผิด?)
URLEncoder
ไม่เข้ารหัสตามข้อกำหนด URL แต่ตามรูปแบบapplication/x-www-form-urlencoded
MIME (ซึ่งเป็นสิ่งที่เซิร์ฟเวอร์แอปพลิเคชันส่วนใหญ่คาดหวังสำหรับคีย์/ค่าพารามิเตอร์) ประเภทURI
เข้ารหัสตามเอกสารประกอบ - นั่นคือมันไม่สมบูรณ์ ตัวสร้าง URL โปรดทราบว่าส่วนต่างๆ ของ URI มีกฎที่แตกต่างกัน ดูโพสต์นี้สำหรับ การวิเคราะห์เพิ่มเติม - person McDowell   schedule 14.01.2013