Table of Contents
ToggleJava URLEncoder Methods
提供 HTML 表單編碼的工具類別,將 String 轉換為 application/x-www-form-urlencoded MIME 格式的靜態方法,對字串進行編碼時,字母數字字元 a-z 、 A-Z 、 0-9 及特殊字元 . 、 – 、 * 、 _ 保持不變,空白字元被轉換為加號 + , 所有其他字元都是不安全的,使用某種編碼方案將其轉換為一個或多個位元組,然後每個位元組由 3 個字元的字串 %xy 表示,其中 xy 是該位元組的兩位十六進位表示形式, URLEncoder Java Methods 本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- net
| +- URLEncoderMethodsTest.java
單元測試
URLEncoder Methods Java 提供 URLEncoder 編碼器操作,指定編碼方案,如: UTF-8 ,將字串編碼。
encode
建立一個 String ,使用 URLEncoder ,指定編碼方案,如: UTF-8 ,進行編碼。
@Test
public void encode() {
try {
String value = "https://www.ruoxue.org";
System.out.println(value);
String result = URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
System.out.println(result);
assertThat(result).isEqualTo("https%3A%2F%2Fwww.ruoxue.org");
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}
https://www.ruoxue.org
https%3A%2F%2Fwww.ruoxue.org
encodeQuery
URLEncoder Methods Java 建立一個 String ,使用 URLEncoder 指定編碼方案,如: UTF-8 ,進行編碼。
@Test
public void encodeQuery() {
try {
String url = "https://www.ruoxue.org/?s=";
String value = "name %";
System.out.println(value);
String result = url + URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
System.out.println(result);
assertThat(result).isEqualTo("https://www.ruoxue.org/?s=name+%25");
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}
name %
https://www.ruoxue.org/?s=name+%25
encodeThrowException
URLEncoder Methods Java 建立一個 String ,使用 URLEncoder 指定不存在的編碼方案,進行編碼,會拋出例外。
@Test
public void encodeThrowException() {
assertThatCode(() -> {
String value = "email@!$";
System.out.println(value);
String result = URLEncoder.encode(value, "X-8");
System.out.println(result);
}).isInstanceOf(UnsupportedEncodingException.class);
}
email@!$
encodeURL
URLEncoder Methods Java 建立一個 String ,使用 URLEncoder 指定編碼方案,如: UTF-8 ,進行編碼。
@Test
public void encodeURL() {
Map<String, String> paramMap = new HashMap<>();
paramMap.put("user", "user");
paramMap.put("name", "name %");
paramMap.put("email", "email@!$");
paramMap.put("amount", "101");
paramMap.put("timestamp", "1470926696715");
System.out.println(paramMap);
String result = paramMap.entrySet().stream().map(e -> {
try {
String key = URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8.toString());
String value = URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8.toString());
StringBuilder buff = new StringBuilder();
buff.append(key);
buff.append("=");
buff.append(value);
return buff.toString();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}).collect(Collectors.joining("&", "https://www.ruoxue.org?", ""));
System.out.println(result);
assertThat(result).isEqualTo(
"https://www.ruoxue.org?amount=101&name=name+%25&user=user&email=email%40%21%24×tamp=1470926696715");
}
{amount=101, name=name %, user=user, email=email@!$, timestamp=1470926696715}
https://www.ruoxue.org?amount=101&name=name+%25&user=user&email=email%40%21%24×tamp=1470926696715
URLEncoderMethodsTest.java
URLEncoder Methods in Java 新增單元測試,驗證是否符合預期。
package org.ruoxue.java_147.net;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
import org.junit.Test;
public class URLEncoderMethodsTest {
@Test
public void encode() {
try {
String value = "https://www.ruoxue.org";
System.out.println(value);
String result = URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
System.out.println(result);
assertThat(result).isEqualTo("https%3A%2F%2Fwww.ruoxue.org");
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}
@Test
public void encodeQuery() {
try {
String url = "https://www.ruoxue.org/?s=";
String value = "name %";
System.out.println(value);
String result = url + URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
System.out.println(result);
assertThat(result).isEqualTo("https://www.ruoxue.org/?s=name+%25");
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}
@Test
public void encodeThrowException() {
assertThatCode(() -> {
String value = "email@!$";
System.out.println(value);
String result = URLEncoder.encode(value, "X-8");
System.out.println(result);
}).isInstanceOf(UnsupportedEncodingException.class);
}
@Test
public void encodeURL() {
Map<String, String> paramMap = new HashMap<>();
paramMap.put("user", "user");
paramMap.put("name", "name %");
paramMap.put("email", "email@!$");
paramMap.put("amount", "101");
paramMap.put("timestamp", "1470926696715");
System.out.println(paramMap);
String result = paramMap.entrySet().stream().map(e -> {
try {
String key = URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8.toString());
String value = URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8.toString());
StringBuilder buff = new StringBuilder();
buff.append(key);
buff.append("=");
buff.append(value);
return buff.toString();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
}).collect(Collectors.joining("&", "https://www.ruoxue.org?", ""));
System.out.println(result);
assertThat(result).isEqualTo(
"https://www.ruoxue.org?amount=101&name=name+%25&user=user&email=email%40%21%24×tamp=1470926696715");
}
}
心得分享
URLEncoder Functions in Java 用於對 URL 統一資源定位,進行編碼的工具類別,使用 URL 編碼確保可靠性和安全性,當使用者透過 get 方法請求特定網站時,表單參數及其值將會新增在 ? 之後,當在值中使用特殊字元時,就會出現問題,因此為了明確地對 URL 進行編碼,提供了靜態方法,依指定編碼的方案,將字串編碼,熟悉 URLEncoder Methods in Java 這些方法的操作,像是: encode 等方法。