php get請求中文亂碼的解決方法:1、使用【$name = iconv("gbk","utf-8",$name);】方法解決亂碼;2、透過【mb_convert_encoding($ name, "utf-8", "gbk");】方法。
推薦:《PHP影片教學》
php接收GET方法傳入的中文參數亂碼
最近寫了個簡單的頁面,從瀏覽器中傳入中文參數(test.php?name=測試),不論怎麼設定utf-8的頁面中都顯示亂碼,google了一把也查到了不少解決辦法,但是問題的原因到底是什麼呢?沒有人深入研究這個問題。出於好奇便要好好查到底是什麼原因導致,也算漲點經驗!
首先來看簡單的測試程式碼:
<?php header("Content-Type:text/html;charset=UTF-8"); $name = $_GET['name']; var_dump($name); ?>
測試結果如下:
# # 程式碼中宣告了回應內容的編碼為utf-8,顯示的內容確實亂碼。這裡請注意var_dump出變數的長度只有4 ,很顯然,兩個中文字的長度在utf-8編碼下肯定不只4個字節,然後我們再看一下Firefox的訪問這個頁面url
#FireFox會自動將中文url編碼,所以我們可以看到測驗變成了����,很明顯,這裡一個字是兩個字節,是gb2313、gbk等中文編碼格式,而不是utf-8編碼。如果我們把頁面的編碼切換為gbk,中文參數就會顯示正常,請參考下圖 #
###接下來我們再做一個測試,程式碼如下:###
<?php header("Content-Type:text/html;charset=UTF-8"); $name = $_GET['name']; var_dump($name); ?>###測試結果,正常顯示:###### # ###### ###### ###### ####### ############### #######那麼,是什麼導致這個問題的發生呢? ######答案是瀏覽器預設編碼在作怪,我們都用的是中文系統,瀏覽器預設的編碼自然也會設定為在地化,例如我自己電腦上的IE和FireFox的預設編碼都是gb系列的。 ######瀏覽器在請求使用者輸入的url 時會預設把url中的中文以預設的編碼格式發送而不是以頁面的編碼格式發送,這就是為什麼頁面中帶有中文的連結正常而我們手動輸入的連結######會亂碼的原因。同理,如果我們把瀏覽器的預設編碼調整為utf-8,那麼輸入url中的中文則會依照utf-8編碼。 ######除了上面的之外,還有以下情況會出現這種情況:######如果gbk編碼的頁面生成的地址鏈接到utf-8的頁面,gbk頁面的中文是按照gbk的格式編碼傳送給下個頁面,那麼utf-8編碼接收後一定會出現亂碼。 ######IIS的url重寫模組,重寫後的中文編碼也是gbk,如果你的頁面是utf-8編碼,那麼重寫參數將會失效。像是這些情況,我們就需要使用php內建的轉碼函數來處理編碼問題了:######方案1:###
$name = iconv("gbk","utf-8",$name);###方案2:###
mb_convert_encoding($name, "utf-8", "gbk");
以上是php get請求出現中文亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!