2

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

我目前正在使用以下代码来读取 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;
    }
}

ETC....

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;
}
4

1 回答 1

4

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

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

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

我已经通过在写入 cookie 之前对值进行 URL 编码来解决这个问题,并在我读出它后立即对其进行 URL 解码。在 .net 中,调用如下所示:

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

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

这会处理任何可能导致问题的与号、等号等。有关 cookie 中允许使用的字符的信息,请参见此处的这篇文章。cookie 中允许的字符

于 2011-02-28T15:27:45.173 回答