当我试图通过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'] : '')
答案 0 :(得分:2)
你不能将非ASCII字符直接放在cookie中(如果你尝试各种不同的浏览器会有不同的情况会发生什么,而且很多都会无可挽回地破坏结果)。
因此,您必须选择一些用于cookie值的编码。只要您的客户端JavaScript和服务器端PHP就一种编码达成一致,这无关紧要。对于此目的,URL编码当然是一种流行的编码方案选择,但它不是任何标准的强制要求,工具不会自动为您解码。
要从URL编码的Cookie值中获取字符,您必须手动调用PHP末尾值rawurldecode
,或decodeURIComponent
从document.cookie
提取JavaScript结束。
要编码为此格式,PHP方面的相应函数为rawurlencode
,JavaScript中为encodeURIComponent
。
(假设您使用UTF-8作为字符串,应该是。)
不要在PHP中使用urlencode
(仅用于表单提交参数并在此上下文中获取空格字符),绝对不会< / strong>在JavaScript中使用escape
(它会使每个非ASCII字符错误,并提供您引用的那种奇怪的非标准%uNNNN
格式。)
(一般来说,JS escape
/ unescape
是一个古老且极具问题的编码方案,你几乎从来没有任何理由可以使用。)
答案 1 :(得分:1)