2010-11-08 5 views
2

J'ai un léger problème en ce que la chaîne que je lis d'un cookie est cassée après l'esperluette. Ainsi, par exemple, la chaîne "bonjour & world" affichera simplement "bonjour". C'est une chaîne qui est un code court, et convertie en quelque chose de plus significatif en utilisant une fonction de commutateur, puis affichée dans une zone de texte. La fonction de commutation fonctionne correctement, mais si elle ne lit pas la chaîne complète du cookie en premier lieu, elle ne pourra évidemment pas localiser le code de fonction dans la fonction de commutation.Chaîne brisée dans le cookie après l'esperluette (javascript)

Je suis actuellement en utilisant le code suivant pour lire le cookie ...

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

Si vous avez besoin de moi pour fournir plus d'information alors s'il vous plaît laissez-moi savoir. Ceci est mon premier message ici, donc excuses à l'avance si quelque chose ne va pas ou pas clair.

Merci Pour votre aide.

EDIT

Le switchFunction ressemble à ceci ..

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

etc ....

La fonction readCookie est comme ça ...

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

Pouvez-vous publier un exemple de chaîne de requête? Il est probable que vous ne l'encodiez pas correctement - c'est-à-dire 'myfile.htm? Foo = bar & s' au lieu de' myfile.htm? Foo = bar% 26s'. –

+0

Bien sûr. Ce n'est pas une URL et je ne peux pas modifier cette valeur car elle est stockée dans une base de données assez sécurisée, mais elle prend le format "texte & texte" (pas &) – user500879

+0

Je pense que cela ne peut pas être répondu sans connaissance de switchFunction , coalesce, $ _ GET ['example'], readCookie - pour beaucoup de quantités inconnues –

Répondre

4

Je pense que j'ai rencontré un problème similaire dans un ASP.NET Application MVC.

Lorsque j'enregistre une chaîne contenant une esperluette à un nom de cookie/paire de valeurs se fait il divisé en une série de paires nom/valeur

par exemple Si vous essayez d'enregistrer ("value","cookiedata123&book=2&page=0"), trois paires de valeurs de nom seront créées "value"="cookiedata123"; "book"="2"; and "page"="0".

J'ai résolu ceci par l'URL Codant la valeur juste avant d'écrire au cookie et l'URL Decoding il dès que je l'ai lu. Dans .net les appels se présentent comme suit:

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

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

qui prend soin de tout esperluette, signes égal etc qui peuvent causer des problèmes. Voir ce message ici pour plus d'informations sur les caractères autorisés dans les cookies. Allowed characters in cookies