客戶端Cookie中文程式設計 (轉)
客戶端Cookie中文
2000-11-28· ·YESKY
------------------------------------------------------------------------------- -
在Cookie的使用中,我們發現這樣一個問題:如果寫入Cookie的內容是中文(如 稱呼),用端(如或)讀出完全正確,但是用一般的script或 的讀Cookie取出的卻是一堆亂碼。這是一個棘手的問題,因為在有些情況下 ,Cookie的內容需要在客戶機端用指令碼語言讀取。如果你寫入了中文,得到了一堆亂碼, 是不是感覺很彆扭呢?解決這個問題,還要從Cookie的存取方式說起。
我們知道,寫入Cookie內容前需要進行escape(十六進位制編碼),編碼時又是以位元組 為單位的,這就是問題的關鍵所在:任何一個漢字都會被拆成兩個位元組分別編碼;而在讀 Cookie時,unescape又以位元組單位解碼,因此最後每個漢字都變成了兩個位元組的亂碼。怎 麼辦呢?ASP或PHP方式能夠正確讀出,應該是在unescape解碼後,又按照unicode編碼把其 中的漢字拼了出來。如果這樣的話,能不能找到一種變通的方法解決這個問題呢?仔細研 究後發現,只要在十六進位制codec(編解碼)過程中能夠儲存漢字資訊就行了,因而我們需 要再外包一層codec過程,方案如下:
1.在escape編碼前,把Cookie字串中的每個字元轉換為unicode碼的字串形式(用 一特殊字元作為字串的分隔符)。
2.在unescape解碼後,先把所有unicode字串提取出來,再用對應的函式轉換為原字元 。
VBScript版程式如下:
例如你要寫入的Cookie內容是"一頂abc",經過CodeCookie變為"99a98a97a- 31029a26432a"(基於考慮,將字串反轉),再經過escape編碼後變為 "99a98a97a%2D31029a26432a"(escape編碼將除字母和數字以外的字元轉換為十六進位制%XX 的形式),注意分隔符不能選%,D和數字。當然,如果有類似密碼的重要資訊,還需要在 上再強化一下。因為寫入Cookie的一般都是簡訊息,編碼後增加的一些位元組可忽略不 計。下面的JavaScript讀寫Cookie函式中就加入了以上的中文支援。
function SetCookie(name,value,expires)
{
var exp=new Date();
exp.setTime(exp.getTime()+expires*60*1000);
document.cookie=name+"="+escape(CodeCookie(value))+" ; expires="+exp.toGMTString()+" ; path=/";
}
function GetCook(name)
{
var strArg=name+"=";
var nArgLen=strArg.length;
var nCookieLen=document.cookie.length;
var nEnd;
var i=0;
var j;
while (i
j=i+nArgLen;
if (document.cookie.substring(i,j)==strArg)
{
nEnd=document.cookie.indexOf (";",j);
if (nEnd==-1) nEnd=document.cookie.length;
return DecodeCookie(unescape(document.cookie.substring(j,nEnd)));
}
i=document.cookie.indexOf(" ",i)+1;
if (i==0) break;
}
return null;
}
如果用CGI程式寫入中文Cookie,客戶端讀取。如在ASP裡,可以先使用前述的編碼函 數後,再用response寫入,例如:response.("Name")=CodeCookie("張三")至此, 中文Cookie的問題基本解決。若有相關問題,請到交流。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987480/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 給客戶端新增cookie客戶端Cookie
- Java OAuth 2.0 客戶端程式設計(二): 客戶端憑據授權JavaOAuth客戶端程式設計
- 中文版vnc客戶端,中文版vnc客戶端下載,中文版vnc客戶端如何使用?VNC客戶端
- Apollo 4 客戶端 SDK 設計客戶端
- Beego當客戶端cookie為空時報錯Go客戶端Cookie
- ubisoft怎麼設定中文 育碧商城客戶端怎麼設定中文客戶端
- TCP程式設計之服務端和客戶端的開發TCP程式設計服務端客戶端
- 「美餐客戶端 3.0」設計過程客戶端
- 跨平臺SSH客戶端Termius中文客戶端
- MySQL客戶端中文亂碼問題。MySql客戶端
- HttpClient客戶端網路程式設計——高可用、高併發HTTPclient客戶端程式設計
- gmail客戶端設定AI客戶端
- 001 Rust 網路程式設計,實現 TCP 服務端和客戶端程式Rust程式設計TCP服務端客戶端
- C# 判斷客戶端是否禁用Cookie的方法C#客戶端Cookie
- 【轉帖】Oracle客戶端NLS_LANG設定Oracle客戶端
- 網通dhcp客戶端設定詳解(轉)客戶端
- cvs客戶端大全(轉)客戶端
- ASP程式設計中Session物件失效的客戶端解決方法程式設計Session物件客戶端
- Redis系列(三)-Redis釋出訂閱及客戶端程式設計Redis客戶端程式設計
- Java OAuth 2.0 客戶端程式設計(三):認證碼授權JavaOAuth客戶端程式設計
- IE客戶客戶端程式開發的利器Bindows客戶端
- Transmit for mac(FTP/SFTP客戶端)中文版MITMacFTP客戶端
- FTP/SFTP客戶端:Transmit Mac中文版FTP客戶端MITMac
- SSH客戶端:Termius mac中文啟用版客戶端Mac
- 判斷客戶瀏覽器是否支援cookie (轉)瀏覽器Cookie
- Redis 設計與實現 (四)--事件、客戶端Redis事件客戶端
- DropDownList設定客戶端事件客戶端事件
- 胖客戶端程式總結客戶端
- C++客戶端程式(socket)C++客戶端
- Solaris網路管理:DNS客戶端的設定(轉)DNS客戶端
- 對「美餐客戶端」設計工作流的優化設計客戶端優化
- Linux網路程式設計之socket簡單通訊--客戶端程式碼Linux程式設計客戶端
- 使用 RAM 富客戶端進行資產工程設計客戶端
- 超越 Cookie:當今的客戶端資料儲存技術Cookie客戶端
- 中文程式設計之思考 (轉)程式設計
- .net客戶端呼叫activeMQ程式碼客戶端MQ
- UNIX網路程式設計學習(18)--UDP回射(伺服器+客戶端)程式程式設計UDP伺服器客戶端
- 專案設計和客戶的關係 (轉)