php request亂碼的解決方法:先開啟tomcat的server.xml;然後設定元素的屬性「URIEncoding=「UTF-8」」即可。
推薦:《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中文網其他相關文章!