① ajax如何傳中文參數亂碼解決辦法
由於某種原因ajax默認就是uft-8的編碼,那麼我們使用一gbk就容易出現亂碼的問題,下面我們就來告訴你php教程ajax亂碼的解決方法吧。
傳遞中文參數,然後修改資料庫教程的。
<script
var url=admin/ajaxmodify.php?+key+=;
url+=encodeuricomponent(encodeuricomponent(value));
xmlhttp.open(get,url,true);
xmlhttp.send(null);
</script
參數是中文encodeuricomponent這個方法必須調用兩次*/function utf8rawurldecode ($source) {
$decodedstr = ;$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charat = substr ($source, $pos, 1);
if ($charat == '%') {$pos++;
$charat = substr ($source, $pos, 1);
if ($charat == 'u') {
// we got a unicode character$pos++;
$unicodehexval = substr ($source, $pos, 4);
$unicode = hexdec ($unicodehexval);
$entity = &#. $unicode . ';';
$decodedstr .= utf8_encode ($entity);$pos += 4;}else {
// we have an escaped ascii character
$hexval = substr ($source, $pos, 2);
$decodedstr .= chr (hexdec ($hexval));$pos += 2;}} else {
$decodedstr .= $charat;$pos++;}}
return $decodedstr;}/*
註:js中,在使用字元轉碼的時候,推薦使用 encodeuricomponent() 或者 encodeuri(),而非escape()。
② java中ajax接收返回數據是亂碼,怎麼辦不要告訴我配置什麼response。setEoncling等的
在頁面用EncodeURI()加密之後,在java里用URIDecoder.decode("字元集",「傳回來的字元串」);
如果你用的伺服器是tomcat的話,就用回在tomcat的server.xml里的connector標簽里答加上
URIEncoding="utf-8"屬性
<Connector URIEncoding="utf-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>
③ ajax傳參為中文,亂碼問題,求救!!
。。。請這樣寫吧。
data: { men: escape(selectValue) },//傳參為中文,這步是把selectValue 值傳給men
escape是瀏覽器轉譯方法內。用此方法,對安容全性及數據一致性有很大的作用。
同理,有逆方法unescape。
unescape一般用於ajax在html頁面接收json字元串時的轉譯及顯示。
希望對你有幫助。
④ ajax $.post傳值中文亂碼!
方法一
在後台中使用request.setCharacterEncoding("UTF-8");
方法二
$.ajax({
type:'post',
......
contentType:'application/x-www-form-urlencoded; charset=UTF-8'
});
方法三(此方法絕對可行)
前台版js將參數值轉為統一資權源標示符(URI)例如name = encodeURI(encodeURI(『張三'));注意要
encodeURI兩次。
後台需要對URI進行解析
String name= request.getParameter(「name」);
name= URLDecoder.decode(name, 「UTF-8″);
⑤ 為什麼利用AJAX傳回來的值是亂碼
這是由於客戶端請求與伺服器端相應編碼不一致。
1.在你的頁面上,你需要指定頁面的編碼,如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2.在你的伺服器端也要指定輸出編碼,如:
response.charset = "utf-8";
3.你的前端頁面和後台處理的頁面字元編碼必須同樣為utf-8。
這樣一般就不會亂碼了,如果還亂,那麼你就用escape()將請求進行編碼後再發送,而後台也使用unescape()將請求進行解碼後再處理就可以了。
輸出時候的中文呢?在Action裡面。
如果是html頁面:
response.setContentType("text/html") ;
response.setCharacterEncoding("utf8") ;//這句會對輸出字元進行設置
如果是xml,把text/html改成text/xml就OK了!
註:個人認為
response.setContentType("text/html; charset=UTF-8");
這方法不太保險,ContentType屬性是針對頁面的,如果是在當前頁面輸出就可以。但跳轉或者傳輸數據的話會出問題!
⑥ Ajax中用URL傳值,亂碼怎麼解決
解決方法:
方法一:提交前採用encodeURI兩次編碼,記住一定是兩次
1.修改以下代碼
復制代碼代碼如下:
data:{id:1, type:encodeURI(encodeURI(『商品版'))}
2.在後台權action里要對取得的字元串進行decode
1、String type = request.getParameter(「type」);
2、type = URLDecoder.decode(type, 「UTF-8″);
方法二:ajax配置contentType屬性,加上charset=UTF-8
在ajax方法中加入以下參數
contentType: 「application/x-www-form-urlencoded; charset=UTF-8″使用其它js框架或者xhr都是差不多,設置header中contentType即可,
這里關鍵是charset=UTF-8,如果沒有這個,是不行的,默認jQuery里的contentType是沒有的
⑦ java中亂碼 ajax 傳入後台是沒事,但是經轉碼後「+」顯示不出來是怎麼回事
現在js編碼再到java解碼。
解決辦法:
1、將字元放到form中,然後內用js提交form表單到伺服器。容
2、將字元中的特殊字元替換成十六進制的字元,一些特殊字元與十六進制的對應關系:
+ 空格 / ? % & = #
%2B %20 %2F %3F %25 %26 &3D %23
str = str.replace(/\+/g,"%2B"); 將+號替換為十六進制
3、最簡單的一種,使用encodeURIComponent()函數。
該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( )
⑧ java/js/html/ajax 使用ajax請求,中文亂碼~~
url=encodeURI(encodeURI(url));前台轉碼一次,java.net.URLDecoder.decode(paperTitle,"UTF-8");後台也轉碼下,試試。
⑨ Ajax傳遞中文參數到後台亂碼的有效解決方法
使用Ajax傳遞中文參數,如果不對參數進行處理的話,傳到後台會變成亂內碼,經測試容可以使用如下方法
這里是以jquery.autocomplete插件中獲取輸入框中的數據傳到後台為例:
注意要對中文使用encodeURI編碼兩次
復制代碼
代碼如下:
extraParams:
{q:function(){return
encodeURI(encodeURI($('#keyword').val()))}}
這里同樣也要解碼兩次
復制代碼
代碼如下:
String
key
=
URLDecoder.decode(URLDecoder.decode(q,"UTF-8"),"tuf-8");
⑩ URL傳遞中文、Ajax傳遞中文,Java如何編碼如何解決亂碼
地址欄中出現漢字的情況有兩種,一種是漢字出現在URL的路徑部分,一種是漢字出現在URL的傳參的部分,第二種情況的時候必須採用編碼後傳參,接受時解碼的方式完成傳參。js中編碼有escape(),encodeURI(),encodeURIComponent()三個常用的方法,escape()常常用在提交頁面和處理頁面的編碼格式相同的情況下(比如它們都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,區別在於encodeURIComponent()也對"?"等特殊字元進行編碼。
一開始遇到中文參數的時候,使用encodeURI()進行了一遍編碼,傳過去後,發現解碼出現問題,於是想到可能是編碼方法使用錯誤,於是使用escape()方法,這時發現解碼時拋出isHexDigit異常。藉助網路搜索isHexDigit異常,
發現原來,是escape()方法造成了異常,同時了解了瀏覽器傳遞地址的一些原理,在瀏覽器地址欄里,瀏覽器認為%是個轉義字元,瀏覽器會把%與%之間的編碼,兩位兩位取出後進行解碼,然後再傳遞給處理頁面,
然後由處理頁面進行再次解碼。由此我想到一直使用encodeURI方法是正確的,只是需要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文編碼成%xy的格式,
第二次是對%xy中的%進行編碼,%編碼成%25。整個傳參過程大體應該是:提交頁面使用encodeURI(encodeURI("中文"))編碼,把最後的編碼結果%25xy傳遞給處理頁面的過程中,瀏覽器獲取URL地址
(注意openModelDialog方法,瀏覽器獲取不到參數編碼)後解碼成%xy,然後把%xy傳遞給處理頁面,處理頁面使用URLDecoder.decode(request.getParameter("參數名"),"UTF-8");完成解碼。
總結:1、漢字出現在URL路徑部分的時候不需要編碼解碼;
2、使用encodeURI進行2次編碼;
3、在openModelDialog()打開的模式窗體里沒辦法用request.getParameter正確獲取參數;
客戶端和伺服器在傳遞數據時可以用過濾器filter解決字元編碼問題,但filter只能解決post方式提交的數據。對於get方式,可以使用兩次encodeURI(encodeURI(中文))並在伺服器中使用URLDecoder.decode(中文, "UTF-8");
今天用Ajax校驗數據時也遇到這個問題,盡管頁面、類和web容器都統一了字元編碼,提交的數據依然是亂碼,所以就採用了2次encodeURI()編碼方式,亂碼問題就解決了。