2

クッキーから読み取っている文字列がアンパサンドの後に壊れているという小さな問題があります。たとえば、文字列 "hello & world" は単に "hello " と表示されます。これは、短いコードである文字列であり、スイッチ関数を使用してより意味のあるものに変換され、テキスト ボックス内に表示されます。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;
    }
}

等....

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 に答える