首頁 >後端開發 >PHP問題 >如何解決php request 亂碼問題

如何解決php request 亂碼問題

藏色散人
藏色散人原創
2020-10-20 09:39:402304瀏覽

php request亂碼的解決方法:先開啟tomcat的server.xml;然後設定元素的屬性「URIEncoding=「UTF-8」」即可。

如何解決php request 亂碼問題

推薦:《PHP影片教學

request、response 中文亂碼問題與解決方式

request亂碼指的是:瀏覽器向伺服器發送的請求參數中包含中文字符,伺服器取得到的請求參數的值是亂碼;

response亂碼指的是:伺服器傳送給瀏覽器的資料包含中文字符,瀏覽器中顯示的是亂碼;

 

亂碼產生的原因:不管是request亂碼還是response亂碼,其實都是因為客戶端(瀏覽器)跟伺服器端採用的編碼格式不一致所造成的。以request亂碼為例:瀏覽器向伺服器發送請求,因為瀏覽器與伺服器之間的通訊實質上是socket流,所以要先將請求參數(字元)轉換成字節,也就是編碼過程,伺服器接收到請求參數後進行解碼(位元組轉字元),然後封裝到request物件中。如果客戶端的編碼與伺服器端的解碼不統一,就會導致透過request取得到的請求參數的值是亂碼。

 

解決:

一、response亂碼

伺服器傳送給瀏覽器的資料預設是依照ISO-8859-1編碼,瀏覽器接收到資料後依照預設的字元集解碼後顯示,如果瀏覽器的預設解碼字元集不是ISO-8859-1,就出現亂碼。

    對於response亂碼,只需要在伺服器端指定一個編碼字元集,然後通知瀏覽器按照這個字元集進行解碼就可以了。有三種方式:

    1、A、設定伺服器端的編碼

response.setCharacterEncoding("utf-8”);

#預設是ISO-8859-1;該方法必須在response.getWriter()之前進行設定

B、通知瀏覽器伺服器發送的資料格式

         response.setHeader("contentType", "text/html; charset=utf- 8”);

    2、A、通知瀏覽器伺服器傳送的資料格式

response.setContentType("text/html;charset=utf-8”);

等同於response.setHeader("contentType", "text/html; charset=utf-8”);它其實會覆蓋response.setCharacterEncoding("utf-8”) ,在開發中只需要設

B、設定伺服器端的編碼

response.setContentType("text/html;charset=utf-8”);

    3、A、設定伺服器端的編碼

response.setCharacterEncoding("utf-8”);

B、瀏覽器使用utf-8進行解碼

         

總結:設定:

A 、設定伺服器端的編碼

response.setCharacterEncoding("utf-8”);

B、通知瀏覽器伺服器發送的資料格式

response.setContentType("text /html;charset=utf-8”);

C、瀏覽器使用utf-8進行解碼

         

#本人是這樣設定的,以防萬一;

二、request亂碼

從瀏覽器發起的存取方式有三種:在網址列直接輸入URL存取、點擊頁面中的超連結存取、提交表單存取。第一種存取方式瀏覽器預設將參數依照utf-8編碼,後面兩種存取方式瀏覽器將參數依照目前頁面的顯示編碼進行編碼。所以對於request亂碼,只需要在伺服器端設定對應的解碼格式即可。由於存取方式不同,瀏覽器對參數的編碼格式也不同,為了方便處理,透過超連結和表單的存取也規定必須是utf-8格式,即顯示目前頁面的編碼也要使用utf-8,這樣瀏覽器將統一使用utf-8對參數進行編碼。

A、post方式

post方式屬於表單提交,參數存在於請求體中。

request.setCharacterEncoding("utf-8”)

B、get方式

get方式提交的參數會跟在請求行中的uri後邊,伺服器依照默認的iso-8859-1進行解碼,這時候解決亂碼有兩種辦法:

辦法一:修改伺服器端對uri參數的預設編碼

在tomcat的server.xml中,設定元素的屬性URIEncoding="UTF-8”即可。 (預設沒有設定此屬性)

例如: 注意:1、設定元素的屬性useBodyEncodingForURI=“true”,意思是請求體和uri使用相同的編碼格式。設定這兩個屬性,可以解決get方式的亂碼,又可以解決     post方式的亂碼。 2.透過修改server.xml指定伺服器對get和post統一依照utf-8解碼,要求tomcat管理下的所有web應用程式都要使用utf-8編碼,也就是所有的jsp、html頁面都使用utf-8編碼。

以上是如何解決php request 亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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