摘要:用戶端 JavaScript 與伺服器端程式碼如何透過 Cookie 共用資料並解決中文亂碼問題
這幾天在撰寫「用實例學 ASP.NET 3.5 AJAX/用戶端篇(使用 VC#)」一書時討論到一個議題,那就是用戶端 JavaScript 與伺服器端程式碼如何溝通以便傳遞或共用資料。當然,作法有很多種,包括:實作一個用戶端回呼、使用一個 HiddenField 控制項、在伺服器端程式碼中使用 RegisterArrayDeclaration 方法建立一個 JavaScript 陣列、使用 Cookie 來共用資料、以及使用非同步回傳來共用資料。
使 用 Cookie 來共用資料是一個最常見且簡單的方式。因為您透過用戶端 JavaScript 所建立的 Cookie 可以在伺服器端程式碼中加以存取,同樣的,您利用伺服器端程式碼所建立的 Cookie,也可以透過用戶端 JavaScript 加以存取。不過對於中文的使用者而言,其難題是必須解決 Cookie 所持有之資料值為中文時的亂碼問題。其實您只要把握下列原則即可迎刃而解:
- 使用伺服器端程式碼(Visual Basic或Visual C#)將資料值指派給 Cookie 之前,必須先使用 Server.UrlPathEncode() 加以編碼,以避免中文亂碼的問題。或許您會問,為什麼不使用 Server.UrlEncode() 呢?原因在於,指派 Cookie 的中文資料值很可能會內含空格。
- 使用用戶端 JavaScript 將資料值指派給 Cookie 之前,必須先使用 encodeURI() 加以編碼,而不要使用 escape() ,以避免中文亂碼的問題。
- 使用伺服器端程式碼(Visual Basic 或 Visual C#)提取 Cookie 值的時候,必須使用 Server.UrlDecode() 方法將所取得的 Cookie 值解碼,以便讓中文資料順利呈現。
- 使用用戶端 JavaScript 提取 Cookie 值的時候,必須使用 decodeURI() 將所取得的 Cookie 值解碼,以便讓中文資料順利呈現。
章立民研究室 2008/07/05 11:39 AM