我有一个小问题,因为我从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;
}
答案 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