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

标签 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('名字',$(this).val(),1);

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

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

最佳答案

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

因此您必须选择一些编码以用于 cookie 值。什么都不重要,只要您的客户端 JavaScript 和服务器端 PHP 同意一种编码即可。 URL 编码当然是用于此目的的一种流行的编码方案选择,但它不是任何标准强制要求的,并且工具不会自动为您解码。

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

  • 要编码成这种格式,对应的函数是rawurlencode在 PHP 方面和 encodeURIComponent在 JavaScript 中。

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

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

(一般来说,JS escape/unescape 是一种古老且高度可疑的编码方案,您几乎没有理由使用它。)

关于php - 通过 $_COOKIE 从 javascript cookie 到 php 输出的西里尔字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2566076/

相关文章:

php - Laravel 嵌套预加载约束

javascript - JavaScript按位运算符代码和Python按位运算符代码之间的区别

javascript - 如何将数据集切换添加到 Chart.js?

perl - 如何使用 Perl 的 LWP::Simple 发送 cookie?

php - php将数据插入mysql数据库,显示错误

php - 重新排序/重新包装 bbcode

javascript - 如何在angularjs的自定义服务中注入(inject)$cookie?

javascript - 在浏览器中加密 Cookie

php - 将 IF 条件与存储在变量中的比较运算符一起使用

javascript - 将日期线数字转换为 QML 中的时间字符串