我有一个包含'!'的网址在查询参数的值中。我在cookie中编码param字符串并加载相关页面。来自php:
foreach ( $_GET as $key => $value ){
setcookie($key,$value,time()+60,'/');
}
在相关页面中,cookie的值(通过javascript / jquery $ .cookie(“”)读取)具有'!'编码为%21。
有人可以告诉我为什么'!'已被编码?它不是cookie值中的有效字符吗?
答案 0 :(得分:0)
有两个地方可以编码数据。第一个是从$_GET
数组中取出时,可以对$value
进行编码,并且可以使用rawurldecode()
进行解码。可能发生编码的第二个地方是使用setcookie()
时;为了避免这种情况,请改用setrawcookie()
,这将设置原始cookie而不是编码cookie。
foreach ( $_GET as $key => $value ){
setrawcookie($key, rawurldecode($value), time() + 60, '/');
}
答案 1 :(得分:0)
有人可以告诉我为什么'!'已被编码?它不是cookie值中的有效字符吗?
见this answer。根据RFC 6265,!
是cookie名称和值中的有效字符。如果php正在编码!
,则意味着它是一个错误。
要解决此问题,您可以执行@Andrew建议的操作或使用名为js-cookie的库,该库允许使用converters拦截cookie读取,然后您可以还原PHP在客户端中执行的编码。 / p>