首頁  >  文章  >  後端開發  >  php get請求出現中文亂碼怎麼辦

php get請求出現中文亂碼怎麼辦

藏色散人
藏色散人原創
2020-08-24 09:34:594124瀏覽

php get請求中文亂碼的解決方法:1、使用【$name = iconv("gbk","utf-8",$name);】方法解決亂碼;2、透過【mb_convert_encoding($ name, "utf-8", "gbk");】方法。

php get請求出現中文亂碼怎麼辦

推薦:《PHP影片教學

php接收GET方法傳入的中文參數亂碼

最近寫了個簡單的頁面,從瀏覽器中傳入中文參數(test.php?name=測試),不論怎麼設定utf-8的頁面中都顯示亂碼,google了一把也查到了不少解決辦法,但是問題的原因到底是什麼呢?沒有人深入研究這個問題。出於好奇便要好好查到底是什麼原因導致,也算漲點經驗!

首先來看簡單的測試程式碼:

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>

測試結果如下:

 

 

 

php get請求出現中文亂碼怎麼辦

# # 

php get請求出現中文亂碼怎麼辦

 

 

程式碼中宣告了回應內容的編碼為utf-8,顯示的內容確實亂碼。這裡請注意var_dump出變數的長度只有4 ,很顯然,兩個中文字的長度在utf-8編碼下肯定不只4個字節,然後我們再看一下Firefox的訪問這個頁面url

 

 

 

php get請求出現中文亂碼怎麼辦 

 

 

#FireFox會自動將中文url編碼,所以我們可以看到測驗變成了����,很明顯,這裡一個字是兩個字節,是gb2313、gbk等中文編碼格式,而不是utf-8編碼。如果我們把頁面的編碼切換為gbk,中文參數就會顯示正常,請參考下圖

 

 

php get請求出現中文亂碼怎麼辦

 

 

 

###接下來我們再做一個測試,程式碼如下:###
<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>   
  
###測試結果,正常顯示:###### # ###### ###### ###### ####### ############### #######那麼,是什麼導致這個問題的發生呢? ######答案是瀏覽器預設編碼在作怪,我們都用的是中文系統,瀏覽器預設的編碼自然也會設定為在地化,例如我自己電腦上的IE和FireFox的預設編碼都是gb系列的。 ######瀏覽器在請求使用者輸入的url 時會預設把url中的中文以預設的編碼格式發送而不是以頁面的編碼格式發送,這就是為什麼頁面中帶有中文的連結正常而我們手動輸入的連結######會亂碼的原因。同理,如果我們把瀏覽器的預設編碼調整為u​​tf-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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn