PHP中使用get傳值的時候,經常會出現亂碼的問題。這種情況通常是由于編碼方式不一致引起的。例如,瀏覽器采用的是UTF-8編碼,而服務器采用的是GB2312編碼,這時就會出現亂碼現象。
參數 ?name=張三&age=20
在UTF-8下會變成:?name=%E5%BC%A0%E4%B8%89&age=20
在GB2312下會變成:?name=%D5%C5%C9%FA&age=20
為了避免這種情況的出現,我們可以采用如下幾種方式解決get傳值亂碼問題:
1. 指定編碼方式
當瀏覽器和服務器采用不同的編碼方式時,我們可以明確的告訴服務器采用什么編碼方式解析get傳值,以此避免亂碼現象的出現。
// 告訴服務器采用UTF-8解析
header("Content-type: text/html; charset=utf-8");
// 解析get傳值
$name = $_GET['name'];
$age = $_GET['age'];
2. 對傳遞的參數進行編碼
我們可以通過對傳遞的參數進行編碼處理,確保在不同編碼方式下,參數都可以正確解析。
// 對get傳遞的參數進行編碼
$name = urlencode($_GET['name']);
$age = urlencode($_GET['age']);
// 解碼,以便使用
$name = urldecode($name);
$age = urldecode($age);
3. 使用Base64編碼方式
采用Base64編碼方式可以避免編碼方式不一致的問題,但是需要注意的是,需要在服務器端進行解碼操作。
// 編碼操作
$name = base64_encode($_GET['name']);
$age = base64_encode($_GET['age']);
// 解碼操作
$name = base64_decode($name);
$age = base64_decode($age);
總之,對于我們來說,無論采用哪種方式,都需要注意編碼方式的一致性,以此確保get傳值的正確解析。