今天我們來聊一聊 Java 和 PHP 中的 urlencode。urlencode 是指將 URL 中的非 ASCII 字符轉換成 "%" 符號加上兩個十六進制字符(例如 '%20' 表示空格),以便瀏覽器和服務器能夠處理它們和展示它們。
在 Java 中,我們可以使用 URLEncoder 類來進行 urlencode,例如:
String encodedUrl = URLEncoder.encode("這是一個非 ASCII 字符:你好", "UTF-8"); System.out.println(encodedUrl); // 輸出:%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%20ASCII%20%E5%AD%97%E7%AC%A6%EF%BC%9A%E4%BD%A0%E5%A5%BD
在上面的例子中,我們將字符串 "這是一個非 ASCII 字符:你好" 進行了 urlencode,并以 UTF-8 編碼格式輸出了結果。我們可以看到,每個非 ASCII 字符都被轉換成了它們對應的十六進制字符。
我們再來看看在 PHP 中如何進行 urlencode。在 PHP 中,我們可以使用 urlencode 函數來進行 urlencode,例如:
$encodedUrl = urlencode("這是一個非 ASCII 字符:你好"); echo $encodedUrl; // 輸出:%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%20ASCII%20%E5%AD%97%E7%AC%A6%EF%BC%9A%E4%BD%A0%E5%A5%BD
在上面的例子中,我們同樣將字符串 "這是一個非 ASCII 字符:你好" 進行了 urlencode,結果與在 Java 中使用 URLEncoder 類進行 urlencode 的結果一致。
需要注意的是,在 PHP 中,urlencode 函數不僅會將非 ASCII 字符進行 urlencode,還會對一些特殊字符進行處理,例如空格會被轉換為加號 "+". 如果我們不希望空格被轉換為加號 "+", 可以使用 rawurlencode 函數,例如:
$encodedUrl = rawurlencode("這是一個非 ASCII 字符:你好"); echo $encodedUrl; // 輸出:%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%20ASCII%20%E5%AD%97%E7%AC%A6%EF%BC%9A%E4%BD%A0%E5%A5%BD
在上面的例子中,我們同樣將字符串 "這是一個非 ASCII 字符:你好" 進行了 urlencode,但使用了 rawurlencode 函數。可以看到,結果與使用 urlencode 函數的結果一致,但空格沒有被轉換為加號 "+"。
除了 urlencode,我們還可以在 Java 和 PHP 中使用 urldecode 來對 urlencode 后的字符串進行解碼,例如在 PHP 中:
$decodedUrl = urldecode("%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%20ASCII%20%E5%AD%97%E7%AC%A6%EF%BC%9A%E4%BD%A0%E5%A5%BD"); echo $decodedUrl; // 輸出:這是一個非 ASCII 字符:你好
在上面的例子中,我們使用了 urldecode 函數對 urlencode 后的字符串 "%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%20ASCII%20%E5%AD%97%E7%AC%A6%EF%BC%9A%E4%BD%A0%E5%A5%BD" 進行解碼,并輸出了結果 "這是一個非 ASCII 字符:你好"。
綜上所述,在 Java 和 PHP 中,我們可以使用 URLEncoder 類和 urlencode 函數來進行 urlencode,使用 urldecode 函數來進行解碼。需要注意的是,在 PHP 中,urlencode 函數除了對非 ASCII 字符進行 urlencode,還會對一些特殊字符進行處理,如果不希望被處理,可以使用 rawurlencode 函數。