`
xxtianxiaxing
  • 浏览: 708040 次
  • 性别: Icon_minigender_1
  • 来自: 陕西
社区版块
存档分类
最新评论

解决javascript读取中文cookie时的乱码问题

    博客分类:
  • web
阅读更多
原来的javascript函数如下:

//cookie操作函数 
function Get_Cookie(name) {  
   var start = document.cookie.indexOf(name+"="); 
   var len = start+name.length+1; 
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
   if (start == -1) return null; 
   var end = document.cookie.indexOf(";",len); 
   if (end == -1) end = document.cookie.length; 
   return unescape(document.cookie.substring(len,end)); 
}  
  
function Set_Cookie(name,value,expires,path,domain,secure) {  
    expires = expires * 60*60*24*1000; 
    var today = new Date(); 
    var expires_date = new Date( today.getTime() + (expires) ); 
    var cookieString = name + "=" +escape(value) + 
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
       ( (path) ? ";path=" + path : "") + 
       ( (domain) ? ";domain=" + domain : "") + 
       ( (secure) ? ";secure" : ""); 
    document.cookie = cookieString; 
}

当cookies中保存有中文信息时,会发生乱码,这样修改下就会解决问题

//cookie操作函数 
function Get_Cookie(name) {  
   var start = document.cookie.indexOf(name+"="); 
   var len = start+name.length+1; 
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
   if (start == -1) return null; 
   var end = document.cookie.indexOf(";",len); 
   if (end == -1) end = document.cookie.length; 
   return decodeURI(document.cookie.substring(len,end));   
}  
  
function Set_Cookie(name,value,expires,path,domain,secure) {  
    expires = expires * 60*60*24*1000; 
    var today = new Date(); 
    var expires_date = new Date( today.getTime() + (expires) ); 
    var cookieString = name + "=" +escape(value) + 
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
       ( (path) ? ";path=" + path : "") + 
       ( (domain) ? ";domain=" + domain : "") + 
       ( (secure) ? ";secure" : ""); 
    document.cookie = cookieString; 
}

主要是把unescape改成了decodeURI。

参照:http://www.csask.com/blog/?p=26

在《JavaScript: The Definitive Guide, 4th Edition》中写到:

In client-side JavaScript, a common use of escape( ) is to encode cookie values, which have restrictions on the punctuation characters they may contain.
在客户端脚本程序中,escape( )函数可以被用作对具有不规范标点的cookie进行编码。(就像我们函数中所用到的一样)

Although the escape( ) function was standardized in the first version of ECMAScript, it has been deprecated and removed from the standard by ECMAScript v3. Implementations of ECMAScript are likely to implement this function, but they are not required to. In JavaScript 1.5 and JScript 5.5 and later, you should use encodeURI( ) and encodeURIComponent( ) instead of escape( ).
虽然escape( ) 已经在ECMAScript中被标准化,但是在ECMAScript v3中,escape( ) 被剔出,如果需要在JavaScript 1.5 和JScript 5.5以后的版本中使用这个函数,建议使用encodeURI( )和encodeURIComponent( )。 
分享到:
评论

相关推荐

    JavaScript读取中文cookie时的乱码问题的解决方法

    总结来说,处理JavaScript中的中文cookie乱码问题,关键是选择正确的函数对字符进行编码和解码。使用`decodeURI()`来替代`unescape()`函数,能够有效解决读取中文cookie时的乱码问题。同时,在写入中文字符到cookie...

    Cookie实现记住密码及解决中文乱码

    而在HTML中,可以通过JavaScript读取Cookie: ```html function getCookie(name) { var cookies = document.cookie.split('; '); for (var i = 0; i ; i++) { var cookiePair = cookies[i].split('='); if ...

    用Javascript读取中文COOKIE的解决办法

    在Cookie的使用中,我们发现这样一个问题:如果写入Cookie的内容是中文(如用户称呼),用服务器端程序(如ASP或PHP)读出完全正确,但是用一般的javascript或VBScript的读Cookie函数取出的却是一堆乱码。...

    JS cookie中文乱码解决方法

    在JavaScript(JS)中,Cookie是一种用于存储小量文本数据在用户浏览器上的机制。这些数据在用户每次访问网站时都会...确保在设置和读取Cookie时都采用这些函数,可以有效避免中文字符乱码的问题,确保数据的正确性。

    解决ajax乱码和页面传值问题

    Ajax发送和接收数据时,乱码问题主要出现在两个环节:发送请求时的数据编码和服务器返回数据的解码。以下是解决乱码的关键步骤: 1. 数据编码:在发送Ajax请求前,确保你的数据已经正确编码。如果数据包含中文或...

    解决Cookie读写中文

    6. **读取Cookie**:在读取Cookie时,同样需要考虑编码问题。从`request.getCookies()`获取Cookie数组后,遍历找到指定名称的Cookie,然后将Cookie值解码为GBK,以便正确显示中文: ```java for (int i = 0; i ; i...

    PHP如何读取由JavaScript设置的Cookie

    3. 如果JavaScript设置的Cookie值包含中文等特殊字符,当使用JavaScript读取时,建议使用`decodeURIComponent(escape(value))`函数进行编码的逆转,以避免出现乱码。 4. 当PHP读取由JavaScript设置的中文Cookie时,...

    asp cookie中文Javascript取得中文cookie

    ASP.NET中的Cookie管理和JavaScript操作Cookie是Web开发中的基础技能,特别是在处理中文字符时,需要特别注意编码问题。本文将深入探讨如何在ASP.NET环境下创建包含中文的Cookie,并使用JavaScript进行读取。 首先...

    JavaScript基础篇——浅谈cookie

    这里使用了`encodeURIComponent`函数来对包含中文和其他特殊字符的数据进行编码,避免在存储过程中出现乱码问题。 2. **获取Cookie**:所有Cookie都是以分号和空格分隔的形式存储在一起的。当我们调用`document....

    AJAX中文乱码解决新方法分享

    在使用AJAX技术时,经常会发生字符编码问题,特别是中文乱码问题。由于JavaScript默认使用UTF-8编码,而服务器端的页面也可能采用不同的编码,如GBK或GB2312,这就导致了在AJAX通信过程中,客户端发送的数据到服务器...

    safari cookie设置中文失败的解决方法

    值得注意的是,尽管这个方法在多数情况下都能有效解决问题,但并非所有情况都适用。在实际开发中,还应考虑其他可能的解决方案,例如使用LocalStorage或SessionStorage(它们不受ASCII编码限制),或者在服务器端...

    AJAX乱码解决新方法

    通过上述分析可以看出,利用Cookie来传输数据是一种有效的解决AJAX中文乱码问题的新方法。它不仅解决了传统方法中存在的不足,还具备较强的实用性和通用性。对于开发者而言,这是一种值得尝试的解决方案。当然,在...

    cookie 最近浏览记录(中文escape转码)具体实现

    在这个案例中,当从Cookie读取数据时,使用`unescape()`函数解码这些编码的中文字符,确保它们能够正确显示。 3. **实现逻辑**: - `addHistory`函数接收产品的详细信息作为参数,检查当前的浏览历史记录(通过`...

    C#中Cookie之存储对象

    为了解决这个问题,我们在存入Cookie前使用`HttpUtility.UrlEncode()`对JSON字符串进行URL编码,取出时使用`HttpUtility.UrlDecode()`解码,这样可以确保中文字符在Cookie中存储和传输时不被错误地处理。 总的来说...

    详解Document.Cookie

    总结,Document.cookie是JavaScript中用于创建、修改和读取Cookie的主要工具。理解其工作原理和使用方法,对于开发需要持久化客户端数据的Web应用程序至关重要。正确地操作Cookie可以帮助我们实现诸如会话管理、用户...

    笔试JSP1.doc

    3. 使用 Cookie:在客户端存储参数,服务器端可以读取 Cookie 4. 使用 Session:在服务器端存储参数,客户端可以通过 Session ID 访问 2. 自定义标签 自定义标签需要继承 `javax.servlet.jsp.tagext.TagSupport` ...

    jquery字符编码转换[文].pdf

    解决这个问题的关键在于如何让Ajax请求在发送时明确告知后端其编码方式,并且在正确的时间点进行解码。以下是一些策略: 1. **通过Ajax告诉后端编码**: - 可以在请求头(Header)中添加自定义字段来传递编码信息...

    JSP学习笔记

    - 读取Cookie时,可以从`request.getCookies()`方法返回的数组中查找特定名称的Cookie。 - 删除Cookie实际上是指设置其过期时间为过去的时间,使其立即失效。 ##### 1.6 Session内置对象 Session用于存储与特定...

Global site tag (gtag.js) - Google Analytics