本文將為大家詳細(xì)介紹“php獲取get參數(shù)亂碼的解決方法”,內(nèi)容步驟清晰詳細(xì),細(xì)節(jié)處理妥當(dāng),而小編每天都會更新不同的知識點(diǎn),希望這篇“php獲取get參數(shù)亂碼的解決方法”能夠給你意想不到的收獲,請大家跟著小編的思路慢慢深入,具體內(nèi)容如下,一起去收獲新知識吧。
成都創(chuàng)新互聯(lián)是專業(yè)的贛榆網(wǎng)站建設(shè)公司,贛榆接單;提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行贛榆網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!php是一個嵌套的縮寫名稱,指的是英文超級文本預(yù)處理語言(php:Hypertext Preprocessor)的縮寫,它的語法混合了C、Java、Perl以及php自創(chuàng)新的語法,主要用來做網(wǎng)站開發(fā),許多小型網(wǎng)站都用php開發(fā),因?yàn)閜hp是開源的,從而使得php經(jīng)久不衰。
php獲取get參數(shù)亂碼的解決辦法:1、通過“$str=iconv("gb2312","utf-8",$str);”方式處理編碼;2、通過“mb_convert_encoding($str,"utf-8", "gb2312");”方式處理。
PHP接收GET中文參數(shù)亂碼深入研究
相信很多PHPer都會遇到這樣的問題:在utf-8的頁面下面,如果直接訪問帶有中文參數(shù)的地址如test.php?s=測試這樣的地址輸出參數(shù)的值會亂碼,在搜索引擎上查詢了下相關(guān)資料,都只給出了一些解決方案,但是卻沒有人研究導(dǎo)致這個問題的原因,今天特寫此文來深入這個問題產(chǎn)生的原因:
首先我們演示這個問題,測試代碼和運(yùn)行結(jié)果如下。
代碼:
測試結(jié)果:
代碼中聲明了響應(yīng)內(nèi)容的編碼為utf-8,顯示的內(nèi)容確實(shí)亂碼。
在這里請注意var_dump出變量的長度只有4,很顯然,兩個中文字的長度在utf-8編碼下肯定不止4個字節(jié)
然后我們再看一下Firefox的訪問這個頁面url
FireFox會自動將中文url編碼,所以我們可以看到測試變成了%B2%E2%CA%D4,很明顯,這里一個字是兩個字節(jié),是gb2313、gbk等中文編碼格式,而不是utf-8編碼。()
如果我們把頁面的編碼切換為gbk,中文參數(shù)就會顯示正常,參見下圖
這時一個有趣的問題就誕生了:像emlog的中文標(biāo)簽這樣的參數(shù)怎么就沒有亂碼呢?
多方測試后,我發(fā)現(xiàn)了一個小小的區(qū)別:
emlog中文參數(shù)的鏈接是在頁面上生成的,而上面我們測試則用手直接在地址欄輸入的,
如果我們直接輸入例如http://be-evil.org/?tag=原創(chuàng)這樣的鏈接,程序同樣會提示找不到標(biāo)簽
測試代碼如下:
測試結(jié)果,正常顯示:
請注意上圖中紅框標(biāo)出的url編碼,這次測試兩個字是由6個字節(jié)組成,而不是先前的2個字節(jié),因此表明中文參數(shù)已經(jīng)正確的成為utf-8編碼。
那么,是什么導(dǎo)致這個問題的發(fā)生呢?
答案是瀏覽器默認(rèn)編碼 在作怪,我們都用的是中文系統(tǒng),瀏覽器默認(rèn)的編碼自然也會設(shè)置為本地化,例如我自己電腦上的IE的FireFox的默認(rèn)編碼都是gb系列的,請參看下圖:
IE的默認(rèn)設(shè)置:
Firefox的默認(rèn)設(shè)置:
正因?yàn)檫@個設(shè)置,讓瀏覽器在請求用戶輸入的url時會默認(rèn)把url中的中文以默認(rèn)的編碼格式發(fā)送而不是以頁面的編碼格式發(fā)送,這就是為什么頁面中帶有中文的鏈接正常而我們手動輸入的鏈接會亂碼的原因。同理,如果我們把瀏覽器的默認(rèn)編碼調(diào)整為utf-8,那么輸入url中的中文則會按照utf-8編碼。
除了上面的之外,還有以下情況會出現(xiàn)這種情況:
如果gbk編碼的頁面生成的地址鏈接到utf-8的頁面,gbk頁面的中文是按照gbk的格式編碼傳送給下個頁面,那么utf-8編碼接收后肯定會出現(xiàn)亂碼。
IIS的url重寫模塊,重寫后的中文編碼也是gbk,如果你的頁面是utf-8編碼,那么重寫參數(shù)將會失效。
像這些情況,我們就需要使用php內(nèi)置的轉(zhuǎn)碼函數(shù)來處理編碼問題了:
方案1:
$str =iconv("gb2312","utf-8",$str);
方案2:
mb_convert_encoding($str,"utf-8", "gb2312");
如果你能讀到這里,小編希望你對“php獲取get參數(shù)亂碼的解決方法”這一關(guān)鍵問題有了從實(shí)踐層面最深刻的體會,具體使用情況還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!