溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法

發(fā)布時(shí)間:2020-08-26 09:57:53 來源:億速云 閱讀:761 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

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

php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法

php接收GET方法傳入的中文參數(shù)亂碼

最近寫了個(gè)簡(jiǎn)單的頁面,從瀏覽器中傳入中文參數(shù)(test.php?name=測(cè)試),不論怎么設(shè)置utf-8的頁面中都顯示亂碼,google了一把也查到了不少解決辦法,但是問題的原因到底是什么呢?沒有人深入研究這個(gè)問題。出于好奇便要好好查查到底是什么原因?qū)е?,也算漲點(diǎn)經(jīng)驗(yàn)!

首先先來看下簡(jiǎn)單的測(cè)試代碼:

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

測(cè)試結(jié)果如下:

php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法

代碼中聲明了響應(yīng)內(nèi)容的編碼為utf-8,顯示的內(nèi)容確實(shí)亂碼。在這里請(qǐng)注意var_dump出變量的長(zhǎng)度只有4 ,很顯然,兩個(gè)中文字的長(zhǎng)度在utf-8編碼下肯定不止4個(gè)字節(jié),然后我們?cè)倏匆幌翭irefox的訪問這個(gè)頁面url

php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法

FireFox會(huì)自動(dòng)將中文url編碼,所以我們可以看到測(cè)試變成了%B2%E2%CA%D4,很明顯,這里一個(gè)字是兩個(gè)字節(jié),是gb2313、gbk等中文編碼格式,而不是utf-8編碼。如果我們把頁面的編碼切換為gbk,中文參數(shù)就會(huì)顯示正常,參見下圖

php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法

接下來我們做另外一個(gè)測(cè)試,代碼如下:

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET['name'];   
var_dump($name);   
?>   
  
<form method="GET">   
<input name="name" />   
<input type="submit" value="輸入中文提交" />   
</form>

測(cè)試結(jié)果,正常顯示:

php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法

那么,是什么導(dǎo)致這個(gè)問題的發(fā)生呢?

答案是瀏覽器默認(rèn)編碼在作怪,我們都用的是中文系統(tǒng),瀏覽器默認(rèn)的編碼自然也會(huì)設(shè)置為本地化,例如我自己電腦上的IE和FireFox的默認(rèn)編碼都是gb系列的。

瀏覽器在請(qǐng)求用戶輸入的url 時(shí)會(huì)默認(rèn)把url中的中文以默認(rèn)的編碼格式發(fā)送而不是以頁面的編碼格式發(fā)送,這就是為什么頁面中帶有中文的鏈接正常而我們手動(dòng)輸入的鏈接

會(huì)亂碼的原因。同理,如果我們把瀏覽器的默認(rèn)編碼調(diào)整為utf-8,那么輸入url中的中文則會(huì)按照utf-8編碼。

除了上面的之外,還有以下情況會(huì)出現(xiàn)這種情況:

如果gbk編碼的頁面生成的地址鏈接到utf-8的頁面,gbk頁面的中文是按照gbk的格式編碼傳送給下個(gè)頁面,那么utf-8編碼接收后肯定會(huì)出現(xiàn)亂碼。

IIS的url重寫模塊,重寫后的中文編碼也是gbk,如果你的頁面是utf-8編碼,那么重寫參數(shù)將會(huì)失效。像這些情況,我們就需要使用php內(nèi)置的轉(zhuǎn)碼函數(shù)來處理編碼問題了:

方案1:

$name = iconv("gbk","utf-8",$name);

方案2:

mb_convert_encoding($name, "utf-8", "gbk");

感謝各位的閱讀!關(guān)于php中g(shù)et請(qǐng)求出現(xiàn)中文亂碼的解決方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI