import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class Example2_UrlEncoding {
public static void main(String[] args) {
// 包含特殊字元的字串
String originalString = "hello world!";
System.out.println("原始字串: " + originalString);
// 步驟1: 標準的 URL 編碼
String standardEncoded = urlEncode(originalString);
System.out.println("標準 URL 編碼後: " + standardEncoded);
// 步驟2:.NET 風格 URL 編碼
String netEncoded = netUrlEncode(standardEncoded);
System.out.println("特規編碼後: " + netEncoded);
// 觀察重點:
// 1. 空格變成了 "+"
// 2. "!" 編碼成 "%21","(" 編碼成 "%28",")" 編碼成 "%29"
// 3. netUrlEncode 又把 %21, %28, %29 換回了 !, (, ),這是 ECPay 的特殊規定
}
/**
* 將資料做 urlEncode編碼
*/
public static String urlEncode(String data) {
String result = "";
try {
// 使用 UTF-8 編碼
result = URLEncoder.encode(data, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* 將做完的urlEncode字串做轉換符合 .NET語言的轉換規則
*/
private static String netUrlEncode(String url) {
String netUrlEncode = url.replaceAll("%21", "\\!").replaceAll("%28", "\\(").replaceAll("%29", "\\)");
return netUrlEncode;
}
}
參考資料
https://developers.ecpay.com.tw/