当我尝试通过 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 端的值,或decodeURIComponent
从document.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/