从javascript cookie到php输出的西里尔字符通过$ _COOKIE

时间:2010-04-02 10:09:44

标签: php javascript cookies

当我试图通过javascript将俄文文本放入cookie中然后通过php输出它时返回:

%u043F%u0440%u043E%u0432%u0435%u0440%u043A%u0430

如何将此解码为正常的西里尔字符?

这是我用来传递给document.cookie的函数:

function setCookie(c_name,val,c_expiredays,c_path,c_domain,c_secure)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+c_expiredays);
    document.cookie=c_name+ "=" +escape(val)+

    /* Additional settings */

((c_path)?“; path =”+ c_path:“”)+ ((c_domain)?“; domain =”+ c_domain:“”)+ //用于仅允许在某个域上使用 ((c_secure)?“; secure”:“”)+ //用于HTTPS(SSL)

    ((c_expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

setCookie方法( '姓名',$(本).VAL(),1);

在服务器端,我输出的是:

(isset($_COOKIE['img_href_value']) ? $_COOKIE['img_href_value'] : '')

2 个答案:

答案 0 :(得分:2)

你不能将非ASCII字符直接放在cookie中(如果你尝试各种不同的浏览器会有不同的情况会发生什么,而且很多都会无可挽回地破坏结果)。

因此,您必须选择一些用于cookie值的编码。只要您的客户端JavaScript和服务器端PHP就一种编码达成一致,这无关紧要。对于此目的,URL编码当然是一种流行的编码方案选择,但它不是任何标准的强制要求,工具不会自动为您解码。

  • 要从URL编码的Cookie值中获取字符,您必须手动调用PHP末尾值rawurldecode,或decodeURIComponentdocument.cookie提取JavaScript结束。

  • 要编码为此格式,PHP方面的相应函数为rawurlencode,JavaScript中为encodeURIComponent

  • (假设您使用UTF-8作为字符串,应该是。)

不要在PHP中使用urlencode(仅用于表单提交参数并在此上下文中获取空格字符),绝对不会< / strong>在JavaScript中使用escape(它会使每个非ASCII字符错误,并提供您引用的那种奇怪的非标准%uNNNN格式。)

(一般来说,JS escape / unescape是一个古老且极具问题的编码方案,你几乎从来没有任何理由可以使用。)

答案 1 :(得分:1)