用戶端Cookie中文編程(上)

來源:互聯網
上載者:User
cookie|編程|用戶端|中文 用戶端Cookie中文編程(轉自yesky.com)

 Cookie的使用中,我們發現這樣一個問題:如果寫入Cookie的內容是中文(如使用者稱呼),用伺服器端程式(如ASP或PHP)讀出完全正確,但是用一般的JavaScript或VBScript的讀Cookie函數取出的卻是一堆亂碼。這是一個棘手的問題,因為在有些情況下,Cookie的內容需要在客戶機端用指令碼語言讀取。如果你寫入了中文,得到了一堆亂碼,是不是感覺很彆扭呢?解決這個問題,還要從Cookie的存取方式說起。
 我們知道,寫入Cookie內容前需要進行escape(十六進位編碼),編碼時又是以位元組為單位的,這就是問題的關鍵所在:任何一個漢字都會被拆成兩個位元組分別編碼;而在讀Cookie時,unescape又以位元組單位解碼,因此最後每個漢字都變成了兩個位元組的亂碼。怎麼辦呢?ASP或PHP方式能夠正確讀出,應該是在unescape解碼後,又按照unicode編碼把其中的漢字拼了出來。如果這樣的話,能不能找到一種變通的方法解決這個問題呢?仔細研究後發現,只要在十六進位codec(編解碼)過程中能夠儲存漢字資訊就行了,因而我們需要再外包一層codec過程,方案如下:

  1.在escape編碼前,把Cookie字串中的每個字元轉換為unicode碼的字串形式(用一特殊字元作為字串的分隔字元)。

  2.在unescape解碼後,先把所有unicode字串提取出來,再用對應的函數轉換為原字元。

<SCRIPT LANGUAGE=javascript>
<!--
//編碼程式:
function CodeCookie(str)
{
 var strRtn="";

 for (var i=str.length-1;i>=0;i--)
 {
  strRtn+=str.charCodeAt(i);
  if (i) strRtn+="a"; //用a作分隔字元
 }
 return strRtn;
}

//解碼程式:
function DecodeCookie(str)
{
 var strArr;
 var strRtn="";

 strArr=str.split("a");

 for (var i=strArr.length-1;i>=0;i--)
 strRtn+=String.fromCharCode(eval(strArr[i]));

 return strRtn;
}
//-->
</script>


VBScript版程式如下:

<SCRIPT LANGUAGE=vbscript>
<!--
"編碼程式:
function CodeCookie(str)
Dim i
Dim strRtn

for i=len(str) to 1 step -1
strRtn=strRtn & ascw(mid(str,i,1))
if (i<>1) then strRtn trRtn & "a" "用a作分隔字元
next
CodeCookie=strRtn
end function

"解碼程式:
function DecodeCookie(str)
Dim i
Dim strArr,strRtn

strArr=Split(str,"a");

for i=UBound(strArr)-LBound(strArr) to 1 step -1
strRtn=strRtn & chrw(Val(strArr(i)))
next

DecodeCookie=strRtn
end function
-->
</script>




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。