欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用Javascript讀取中文COOKIE的解決辦法

 更新時間:2007年02月15日 00:00:00   作者:  
在Cookie的使用中,我們發(fā)現(xiàn)這樣一個問題:如果寫入Cookie的內(nèi)容是中文(如用戶稱呼),用服務(wù)器端程序(如ASP或PHP)讀出完全正確,但是用一般的javascript或VBScript的讀Cookie函數(shù)取出的卻是一堆亂碼。這是一個棘手的問題,因?yàn)樵谟行┣闆r下,Cookie的內(nèi)容需要在客戶機(jī)端用腳本語言讀取。如果你寫入了中文,得到了一堆亂碼,是不是感覺很別扭呢?解決這個問題,還要從Cookie的存取方式說起。 
  我們知道,寫入Cookie內(nèi)容前需要進(jìn)行escape(十六進(jìn)制編碼),編碼時又是以字節(jié)為單位的,這就是問題的關(guān)鍵所在:任何一個漢字都會被拆成兩個字節(jié)分別編碼;而在讀Cookie時,unescape又以字節(jié)單位解碼,因此最后每個漢字都變成了兩個字節(jié)的亂碼。怎么辦呢?ASP或PHP方式能夠正確讀出,應(yīng)該是在unescape解碼后,又按照unicode編碼把其中的漢字拼了出來。如果這樣的話,能不能找到一種變通的方法解決這個問題呢?仔細(xì)研究后發(fā)現(xiàn),只要在十六進(jìn)制codec(編解碼)過程中能夠保存漢字信息就行了,因而我們需要再外包一層codec過程,方案如下: 

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

  2.在unescape解碼后,先把所有unicode字串提取出來,再用對應(yīng)的函數(shù)轉(zhuǎn)換為原字符。 

復(fù)制代碼 代碼如下:

<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版程序如下: 

復(fù)制代碼 代碼如下:

<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 = strRtn & "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>  

例如你要寫入的Cookie內(nèi)容是"一頂abc",經(jīng)過CodeCookie變?yōu)?99a98a97a-31029a26432a"(基于安全考慮,將字符串反轉(zhuǎn)),再經(jīng)過escape編碼后變?yōu)?99a98a97a%2D31029a26432a"(escape編碼將除字母和數(shù)字以外的字符轉(zhuǎn)換為十六進(jìn)制%XX的形式),注意分隔符不能選%,D和數(shù)字。當(dāng)然,如果有類似密碼的重要信息,還需要在加密上再強(qiáng)化一下。因?yàn)閷懭隒ookie的一般都是短信息,編碼后增加的一些字節(jié)可忽略不計(jì)。下面的javascript讀寫Cookie函數(shù)中就加入了以上的中文支持。 

function SetCookie(name,value,expires) 

 var exp=new Date(); 
 exp.setTime(exp.getTime()+expires*60*1000); 
 documents.cookie=name+"="+escape(CodeCookie(value))+" ; expires="+exp.toGMTString()+" ; path=/"; 


function GetCookie (name) 

 var strArg=name+"="; 
 var nArgLen=strArg.length; 
 var nCookieLen=documents.cookie.length; 
 var nEnd; 
 var i=0; 
 var j; 

while (i<nCookieLen) 

 j=i+nArgLen; 
 if (documents.cookie.substring(i,j)==strArg) 

 nEnd=documents.cookie.indexOf (";",j); 
 if (nEnd==-1) nEnd=documents.cookie.length; 
 return DecodeCookie(unescape(documents.cookie.substring(j,nEnd))); 

 i=documents.cookie.indexOf(" ",i)+1; 
 if (i==0) break; 

 return null; 



如果用CGI程序?qū)懭胫形腃ookie,客戶端讀取。如在ASP里,可以先使用前述的編碼函數(shù)后,再用response寫入,例如:response.cookies("Name")=CodeCookie("張三")至此,中文Cookie的問題基本解決。

相關(guān)文章

  • uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)詳細(xì)過程

    uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)詳細(xì)過程

    這篇文章主要給大家介紹了關(guān)于uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)的相關(guān)資料,實(shí)際開發(fā)工作中在登陸的時候經(jīng)常需要圖形驗(yàn)證碼,需要的朋友可以參考下
    2023-07-07
  • JavaScript中alert的使用方法超詳細(xì)介紹

    JavaScript中alert的使用方法超詳細(xì)介紹

    JS中的alert作用是在瀏覽器中彈出一個警告框,而使用alert有三種方式,不同的方式所呈現(xiàn)的效果也不相同,這篇文章主要給大家介紹了關(guān)于JavaScript中alert使用方法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組方法

    JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組方法

    這篇文章主要給大家分享了JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組的方法,下面文章圍繞JS數(shù)組轉(zhuǎn)換的相關(guān)資料展開內(nèi)容,對大家的學(xué)習(xí)有一定的參考價值,需要的小伙伴可以參考一下
    2022-01-01
  • Bootstrap樹形組件jqTree的簡單封裝

    Bootstrap樹形組件jqTree的簡單封裝

    這篇文章主要介紹了Bootstrap樹形組件jqTree的簡單封裝,封裝一個稍微完整點(diǎn)的樹形組件,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JS實(shí)現(xiàn)根據(jù)用戶輸入分鐘進(jìn)行倒計(jì)時功能

    JS實(shí)現(xiàn)根據(jù)用戶輸入分鐘進(jìn)行倒計(jì)時功能

    倒計(jì)時功能大家無論在各大網(wǎng)站都可以看到,今天小編給大家分享一段基于js實(shí)現(xiàn)的根據(jù)用戶輸入分鐘進(jìn)行倒計(jì)時功能,非常不錯,需要的朋友參考下吧
    2016-11-11
  • javascript html5實(shí)現(xiàn)表單驗(yàn)證

    javascript html5實(shí)現(xiàn)表單驗(yàn)證

    這篇文章主要為大家詳細(xì)介紹了javascript html5實(shí)現(xiàn)表單驗(yàn)證的具體代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • js中的getElementById的使用方法

    js中的getElementById的使用方法

    getElementById是JavaScript中的一個DOM方法,用于根據(jù)元素的id屬性獲取HTML文檔中的元素,本文給大家介紹js中的getElementById的使用方法,感興趣的朋友一起看看吧
    2023-10-10
  • ionic隱藏tabs的方法

    ionic隱藏tabs的方法

    這篇文章主要為大家詳細(xì)介紹了ionic隱藏tabs的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • JavaScript中DOM和BOM原理詳析

    JavaScript中DOM和BOM原理詳析

    這篇文章主要介紹了JavaScript中DOM和BOM原理詳析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • JavaScript?BOM詳解

    JavaScript?BOM詳解

    這篇文章主要為大家介紹了JavaScript?BOM,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評論