ajax中傳遞中文引數的編碼問題

2021-04-08 18:57:52 字數 1706 閱讀 1062

遇到問題:在使用xhr發出請求時,請求的url中引數帶中文,這時在後台解析request得不到中文

如:request = new activexobject("microsoft.xmlhttp");

request.open("get", url);中我的url需要帶中文引數

直接加引數是在後台解析不出來的,所以我使用方法對url進行編碼轉換

在頁面中中文引數傳遞前先轉碼:

function

encode(chinesestr) 

用經過轉馬後的字串去生成 url

然後就要在後台進行解碼了

以為沒法直接從request中取到編碼字串,所以使用方法先取出url,然後再取出url的引數進行解碼

取出url,以及取引數方法

string ***

=geturlparameter(unescape(request.getquerystring()),

"***

"); 

//如此獲得的***即為解碼後的正確的中文

public

string geturlparameter(string str,string targetstr)

}return

stringarray[1];

}//

解碼方法

//以下是對js的escape進行解碼

private

final

static

byte

val =;

/*** 解碼 說明:本方法保證 不論引數s是否經過escape()編碼,均能得到正確的「解碼」結果** 

@params* 

@return

*/public

static

string unescape(string s)  

elseif(

'a

'<=

ch &&

ch <='z

')  

elseif(

'0

'<=

ch &&

ch <='9

')  

else

if(ch =='

-'

||ch =='

_'

//unreserved : as it was

||ch =='

.'

||ch =='

!'

||ch =='

~'

||ch =='

*'

||ch =='

/''

|| ch == '(

'|| ch == ')

')  

else

if(ch =='

%'

)  else

elsei++

;}

return

sbuf.tostring();}

這時候得到的exfirstword

就是正確的中文了

問題解決

在使用xhr發出請求時,實際上是向後台傳送了乙個http的包,只不過這個http的包是封裝的xmlhttprequest,而xmlhttprequest對中文的編碼方式是gb2312的,這樣由於頁面用的是utf-8編碼,所以在後台就會出現問題了。

所以如果你的頁面是gbk或者gb2312編碼的,這樣在用xmlhttprequest就沒有這麼多麻煩了

ajax引數傳遞時中文亂碼問題

ajax傳遞引數時,一般就是js向程式頁面傳遞和程式向js檔案傳遞兩種情況,當出現中文漢字時,會出現亂碼。因為存在上述兩種情況,所以解決起來也要分開對待。這裡是php系統中遇到的問題,所以以php為例項來解決ajax傳遞中文的問題。1.ajax向程式頁面裡傳遞中文漢字時出現亂碼的情況 ajax中先用...

ajax主流瀏覽器的中文引數傳遞

做web的童鞋經常遇到這樣的痛苦,前端傳遞給後台的中文引數是亂碼,導致無法正確查詢資料庫或做檔案處理。現在主流的瀏覽器主要是三種 ie,firefox,chrome。我個人在web時,比較喜歡用chrome做測試展示,因為平時都常用chrome。我看過各大瀏覽器之間的比較,chrome的綜合實力是很...

PHP中json encode中文編碼的問題

php的json擴充套件自帶的json encode函式,如果對含有中文的字元進行編碼時,會自動轉換成unicode編碼。a array city 北京 abcd天津 echo json encode a n debian test server home php php test1.php 現在有...