【问题标题】:Cyrillic characters from javascript cookie to php output via $_COOKIE通过 $_COOKIE 从 javascript cookie 到 php 输出的西里尔字符
【发布时间】:2011-02-03 16:43:15
【问题描述】:

当我尝试通过 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('name',$(this).val(),1);

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

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

【问题讨论】:

    标签: php javascript cookies


    【解决方案1】:

    您不能将非 ASCII 字符直接放在 cookie 中(如果您尝试在每个不同的浏览器上有所不同,并且其中许多会不可挽回地破坏结果,会发生什么情况)。

    因此,您必须选择一些编码以用于 cookie 值。没关系,只要您的客户端 JavaScript 和服务器端 PHP 同意一种编码即可。为此目的,URL 编码无疑是一种流行的编码方案选择,但它不受任何标准的强制要求,工具也不会自动为您解码。

    • 要从 URL 编码的 cookie 值中获取字符,您必须在 PHP 端手动调用 rawurldecode,或在 JavaScript 端从 document.cookie 中提取 decodeURIComponent

    • 要编码成这种格式,对应的函数是 PHP 端的 rawurlencode 和 JavaScript 端的 encodeURIComponent

    • (假设您对字符串使用 UTF-8,您应该这样做。)

    不要在 PHP 中为此使用 urlencode(它仅用于表单提交参数,并且在此上下文中空格字符错误),并且绝对不要 在 JavaScript 中使用 escape(它会使每个非 ASCII 字符都出错,从而产生你引用的那种奇怪的非标准 %uNNNN 格式)。

    (一般来说,JS escape/unescape 是一种古老且备受质疑的编码方案,您几乎不应该有任何理由使用它。)

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2017-10-05
      • 2016-06-15
      • 2014-03-28
      相关资源
      最近更新 更多