2010-11-08 3 views
2

У меня есть небольшая проблема в том, что строка, которую я читаю из файла cookie, прерывается после амперсанда. Так, например, строка «hello & world» просто отобразит «привет». Это строка, которая является коротким кодом и преобразуется в нечто более значимое с помощью функции переключения, а затем отображается в текстовом поле. Функция переключения работает нормально, но, очевидно, если она не считывает полную строку из файла cookie в первую очередь, тогда он не сможет найти короткий код в функции переключателя.Сломанная строка в cookie после ampersand (javascript)

В настоящее время я использую следующий код, чтобы прочитать куки ...

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

Если вам нужно, чтобы я предоставить больше информации, пожалуйста, дайте мне знать. Это мой первый пост здесь, поэтому извиняйтесь заранее, если что-то не так или неясно.

Спасибо За вашу помощь.

EDIT

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

Можете ли вы разместить пример строки запроса? Скорее всего, вы не кодируете его правильно - то есть 'myfile.htm? Foo = bar & s' вместо' myfile.htm? Foo = bar% 26s'. –

+0

Несомненно. На самом деле это не URL-адрес, и мне не удается редактировать это значение, поскольку оно хранится в довольно безопасной базе данных, но оно принимает формат «текст и текст» (не &) – user500879

+0

Я думаю, что на это нельзя ответить без знания switchFunction , coalesce, $ _ GET ['example'], readCookie - во многие неизвестные величины –

ответ

4

Я думаю, что у меня возникла аналогичная проблема в ASP.NET Приложение MVC.

Когда я сохранить строку, содержащую амперсандов к имени куки/значение пары он фактически разбивается на ряд пар имя/значение

например при попытке сэкономить ("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