&符号后的cookie中的断字符串(javascript)

时间:2010-11-08 16:29:47

标签: javascript cookies ampersand

我有一个小问题,因为我从cookie中读取的字符串在&符号后被破坏了。因此,例如字符串“hello& world”将只显示“hello”。它是一个短代码的字符串,使用switch函数转换为更有意义的字符串,然后显示在文本框中。切换功能工作正常,但显然如果它不是首先从cookie中读取完整的字符串,那么它将无法在切换功能中找到短代码。

我目前正在使用以下代码来阅读Cookie ...

document.example.textfield.value = switchFunction(unescape(coalesce($_GET['example'],readCookie('_cookie'))));

如果您需要我提供更多信息,请告诉我。这是我在这里的第一篇文章,如果有任何错误或不清楚,请提前道歉。

谢谢你的帮助。

修改

switchFunction看起来像这样..

function SwitchFuntion(Code){
    switch(Code){
       case 'text & text, Text' : return 'new meaningful text'; break;
    }
}

等...

readCookie功能就像这样......

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

1 个答案:

答案 0 :(得分:4)

我认为我在ASP.NET MVC应用程序中遇到了类似的问题。

当我将包含&符号的字符串保存到cookie名称/值对时,它实际上被拆分为一系列名称/值对

e.g。尝试保存("value","cookiedata123&book=2&page=0")将导致创建3个名称值对"value"="cookiedata123"; "book"="2"; and "page"="0"

我已经通过URL解决了这个问题在写入cookie之前对值进行编码和URL一读出就解码它。在.net中,调用看起来像这样:

// Encode
return System.Web.HttpUtility.UrlEncode(cookieData);

// Decode
return System.Web.HttpUtility.UrlDecode(encodedCookieData);

这会照顾任何可能导致问题的&符号,等号。有关cookie中允许的字符的信息,请参阅此处的帖子。 Allowed characters in cookies