1. 程式人生 > >解決表單get提交亂碼問題

解決表單get提交亂碼問題

客戶端提交資料到服務有兩種方式GET和POST
1.get方式
資料直接在url上進行拼接,使用&分隔key-value對.
但有時key,value會出現中文等對於html標準來說不安全的字元
html標準說
除了字元”a”-”z”,”A”-”Z”,”0″-”9″,”.”,”-”,”*”,和”_” 其他的字元都是不安全的,需要進行編碼.其中” “空格會被編碼成+號
當出現不安全字元時,在傳送到伺服器之前,瀏覽器會將這些引數值進行編碼,一般推薦是使用utf-8編碼格式.
字元被轉換為1個或者多個位元組,然後每個位元組都被表示成”%xy”格式的由3個字元組成的字串,xy是位元組的2位16進位制的表示.
也可以使用javascript對資料進行encodeURIComponent(url);
現在的url就成了ASCII範圍內的字元了,然後以iso-8859-1的編碼方式轉換成二進位制隨著請求頭一起傳送出去,對於get方法來說,沒有請求實體,含有資料的url都在請求頭裡面
請注意,其實這裡進行了兩次編碼,第一次是使用UTF8,第二次使用iso-8859-1編碼成能在網路上傳輸二進位制101010….
現在問題來到了伺服器端,每種伺服器預設的編碼方式都可能不同,比如tomcat預設編碼就是iso-8859-1, 而resin預設編碼是utf-8
按道理伺服器端也會做兩次的解碼動作,第一次是對二進位制內容的iso-8859-1的解碼,第二次是使用伺服器預設的編碼對資料進行解碼,
因此我們使用request.getParameter(“name”)得到的資料是經過兩次解碼的.
當tomcat使用iso-8859-1對資料進行第二次解碼時,因為對應客戶端編碼是utf8,
因此我們使用request.getParameter(“name”)就肯定亂碼.
如果我們不去改變tomcat的預設編碼,可以使用
new String(request.getParameter(“name”).getBytes(“iso-8859-1″), “utf-8″);手工重新解碼.
request.setCharacterEncoding(“utf-8″)這種方式對於get方式提交資料是無效的,
但是對post方式提交資料卻是有效的.因為get沒有request body.

通常的做法還是修改tomcat的預設編碼:
在server.xml中的connector加上URIEncoding=”UTF-8″即可

2.post方式
post方式提交的資料也是必須進行編碼的.
如果form所在html檔案指定了編碼,就使用那個編碼進行url編碼.

總結:為了防止出現亂碼,一般系統相關的檔案都設成utf8格式,web伺服器,java伺服器,資料庫的編碼格式都設為utf8.這樣一般比較少出現亂碼問題.
還有就是儘量使用post方式提交資料,一個是因為url的長度是有限制的,而get方式是將資料拼接到url上的.

相關推薦

解決get提交亂碼問題

客戶端提交資料到服務有兩種方式GET和POST1.get方式 資料直接在url上進行拼接,使用&分隔key-value對. 但有時key,value會出現中文等對於html標準來說不安全的字元 html標準說 除了字元”a”-”z”,”A”-”Z”,”0″-”9″,”.”,”-”,”*”,和”_”

解決GET提交後臺資料亂碼問題

    ​在頁面上提交資料到server有兩種方式“GET”和“POST”,當使用“GET”時,傳輸的資料是直接拼接在URL後面的。當資料中含有對HTML來說不安全的字元比如中文時,就會被編碼,一般採用的是UTF-8編碼。這時URL已經被轉義成相對安全的字串。

ssm整合--解決POST跟GET提交亂碼問題

一,解決post亂碼問題在web.xml中加入:<filter> <filter-name>CharacterEncodingFilter</filter-name>

解決重複提交問題(使用例模式)、(md5+base64)

form表單重複提交 1.新建TokenProccessor工具類 package cn.kgc.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmEx

解決重複提交的簡單方法

在平時開發中,如果網速比較慢的情況下,使用者提交表單後,發現伺服器半天都沒有響應,那麼使用者可能會以為是自己沒有提交表單,就會再點選提交按鈕重複提交表單,我們在開發中必須防止表單重複提交。 一、表單重複提交的常見應用場景 有如下的form.jsp頁面 <%@ pa

解決重複提交和分散式伺服器驗證碼存放問題

一、解決表單重複提交問題 表單重複提交很常見,造成的原因是:表單重複提交的原因是短時間內使用者多次請求到後臺,後臺還沒處理完上一個請求響應到前端頁面接著下一個請求來了,會造成資料庫的                                             

使用js控制重複提交(1加鎖,2事件方式,3 EasyUI中解決重複提交

方法一、var flag = true; $(function() { $("#interested").click(function() { beInterested(); }); }); function beInterested() { //$("#inte

解決ssm專案資料提交到資料庫亂碼問題

問題:在ssm整合的專案裡,從前臺頁面獲取表單資料存到資料庫中亂碼 先說解決辦法然後分析:問題出在form表單的提交方式上,我的web.xml配置過濾器都已經指定了編碼集,為什麼沒有生效?原因是,對於在web.xml中配置的過濾器指定編碼集只是對錶單的post提交方式有效,

springmvc + freemarker 解決提交、頁面顯示亂碼 的問題

其實,網上有很多的解決亂碼的,不過都只能在某些地方起作用,比如給spring增加一個編碼過濾器,能夠解決表單提交(所有以post方式提交的)的亂碼問題,比如給tomcat設定預設的url編碼,能夠解決get請求的亂碼問題,現在我將這兩者結合起來,能夠完美解決所有亂碼問題(至

關於自動提交的問題及解決方式

情況 方法名 return clas btn htm 進行 str xxx 在js中,我們常常會用到表單提交,但小編今天遇到一個問題:在刪除所有引用的js文件之後,頁面還是刷新 最後發現問題如下: 在js中,使用表單提交,即使你不寫$("XXX").submit()也會使得

form提交數據而不進行頁面跳轉的解決方案

ner 按鈕 pos mes inline -c ddr for msg 轉載   將數據提交到saveReport(form的action指向)頁面,但是頁面又不進行跳轉,即保持當前頁面不變呢?利用jquery的ajaxSubmit函數以及form的onsubmit函數完

formGet方式提交時,action中帶引數傳遞不了

form表單get方式提交時,action中帶引數傳遞不了 樣例: <form action="getPostServlet/getPost.do?param4=param4" method="get"> <input type="hidden" name="p

彈出對話方塊時,點選“取消”仍然提交解決方法

大家在實際工作中用js的時候可能會遇到這種情況:confirm()彈出的對話方塊,當用戶點選“取消”的時候,表單仍然提交的問題; 一般來說這種問題產生的原因有一下幾點:1:在判斷comfirm ()為“取消”的時候,我們沒有返回false;即:if(!comfirm(“確定要提交表單嗎?”)){ &

提交get和post的區別

1.get是從伺服器上獲取資料,post是向伺服器傳送資料。  2.get是把引數資料 佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTPpost機制,將表單內各 個欄位與其內容放置在HTML HEADER

laravel中防止重複提交的綜合解決方案

怎樣防止表單重複提交,通過搜尋引擎能搜到很多結果,但很零散,系統性不強,正好前幾天做了這個功能,決定記錄下來。 根據資料流向的過程,分別在三個“點”控制表單的重複提交,如下: 第一,使用者觸發submit時,前端js控制提交按鈕的狀態,使用者觸發提交即設

ajax提交出現亂碼原因

當我們使用ajax進行表單提交時,data屬性可以通過form.serialize();實現引數的自動裝填,但是在控制端接收到請求後,沒有實現反序列化的話,就會出現中文亂碼 那麼解決方法就是,事先可以寫一個form類,當接收到請求後,將它封裝到該類的物件中,然

easyui關於解決tab新增的頁面通過href載入資料內容的頁面重新整理後form重複提交的問題;

1.分析 Easyui中的tabs元件以href方式載入目標頁面,如果目標頁面中有dialog或者window這類的easyui元件中放了form.那麼在關閉這個tab再次開啟或者點選重新整理.如果進行form提交操作,後臺就會收到兩次提交請求,再次重複以上操作會收到3

關於http get和formpost提交資料大小限制

之前我去面試,面試的人問了我些問題,其中令我印象深刻的就是如題的兩個,回來後特意去查找了一下,關於http get提交資料上限,之前只知道資料上限差不多是幾kb大小,具體為什麼卻沒有了解 httpget是通過url來傳遞資料,url不存在上限的問題,http協

解決form資料提交不到servlet中去的問題

servlet用的baseservlet繼承,反射獲取url地址中的method的地址 @WebServlet("/orders") public class OrderServlet extends BaseServlet{ // 3.增加配送通知單

資料提交後,資料庫記錄顯示為問號的解決

一、MyEclipse下編碼的設定 1、window -> Preferences -> general -> Workspace -> Text file encoding(工作區的編碼設定) 選擇Other,將編碼改變為UTF-8。 2、window -> Pref