標籤:style http color os ar 使用 for sp div
最近做PHP的webService伺服器,發現用Get方法擷取參數時擷取到的參數時亂碼。一番折騰後發現時瀏覽器本地語言的問題。
首先先來看下簡單的測試代碼:
- <?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編碼,所以我們可以看到測試變成了%B2%E2%CA%D4,很明顯,這裡一個字是兩個位元組,是gb2313、gbk等中文編碼格式,而不是utf-8編碼。如果我們把頁面的編碼切換為gbk,中文參數就會顯示正常,參見
接下來我們做另外一個測試,代碼如下:
- <?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>
測試結果,正常顯示:
那麼,是什麼導致這個問題的發生呢?
答案是瀏覽器預設編碼在作怪,我們都用的是中文系統,瀏覽器預設的編碼自然也會設定為本地化,例如我自己電腦上的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方法傳入的中文參數亂碼問題