如何在纯PHP中解析$#u服务器[';HTTP#u COOKIE';]?
我需要用纯PHP解析$\u服务器['HTTP\u COOKIE']字符串。我无法访问$\u COOKIE或http\u parse\u COOKIE(PECL)等函数 我尝试使用如下函数:如何在纯PHP中解析$#u服务器[';HTTP#u COOKIE';]?,php,cookies,Php,Cookies,我需要用纯PHP解析$\u服务器['HTTP\u COOKIE']字符串。我无法访问$\u COOKIE或http\u parse\u COOKIE(PECL)等函数 我尝试使用如下函数: function ParseCookies($strHeaders) { $result = array(); $aPairs = explode(';', $strHeaders); foreach ($aPairs as $pair) {
function ParseCookies($strHeaders)
{
$result = array();
$aPairs = explode(';', $strHeaders);
foreach ($aPairs as $pair)
{
$aKeyValues = explode('=', trim($pair), 2);
if (count($aKeyValues) == 2)
{
switch ($aKeyValues[0])
{
case 'path':
case 'domain':
$aTmp[trim($aKeyValues[0])] = urldecode(trim($aKeyValues[1]));
break;
case 'expires':
$aTmp[trim($aKeyValues[0])] = strtotime(urldecode(trim($aKeyValues[1])));
break;
default:
$aTmp['name'] = trim($aKeyValues[0]);
$aTmp['value'] = trim($aKeyValues[1]);
break;
}
}
$result[] = $aTmp;
}
return $result;
}
但是分解模式很简单,因为我可以有一个类似于name=“a;b;c=1;”的cookie代码>
我需要一些东西以正确的方式标记字符串。有什么想法吗?一些改进,但不是代币
Class CookieParser{
public $cookies = array();
function __construct($str){
foreach(explode('; ',$str) as $k => $v){
preg_match('/^(.*?)=(.*?)$/i',trim($v),$matches);
$this->cookies[trim($matches[1])] = urldecode($matches[2]);
}
}
}
$CP = new CookieParser($_SERVER['HTTP_COOKIE']);
print_r($CP->cookies);
一些改进,但不是代币
Class CookieParser{
public $cookies = array();
function __construct($str){
foreach(explode('; ',$str) as $k => $v){
preg_match('/^(.*?)=(.*?)$/i',trim($v),$matches);
$this->cookies[trim($matches[1])] = urldecode($matches[2]);
}
}
}
$CP = new CookieParser($_SERVER['HTTP_COOKIE']);
print_r($CP->cookies);
一些改进,但不是代币
Class CookieParser{
public $cookies = array();
function __construct($str){
foreach(explode('; ',$str) as $k => $v){
preg_match('/^(.*?)=(.*?)$/i',trim($v),$matches);
$this->cookies[trim($matches[1])] = urldecode($matches[2]);
}
}
}
$CP = new CookieParser($_SERVER['HTTP_COOKIE']);
print_r($CP->cookies);
一些改进,但不是代币
Class CookieParser{
public $cookies = array();
function __construct($str){
foreach(explode('; ',$str) as $k => $v){
preg_match('/^(.*?)=(.*?)$/i',trim($v),$matches);
$this->cookies[trim($matches[1])] = urldecode($matches[2]);
}
}
}
$CP = new CookieParser($_SERVER['HTTP_COOKIE']);
print_r($CP->cookies);
要分析Cookie的原始值:
,例如
datr=xxx; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly
如果PHP非常简单,请使用:
您可能会注意到,但是我们甚至不需要担心后面的空间代码>。此外,parse_str将执行urldecode
请注意cookie名称中的点(.)和空格()将被下划线(389;)替换。就像。即使允许点(.)
配对功能将是:
echo http_build_query($cookies, '', '; ', PHP_QUERY_RFC3986);
它将转换回原始cookie字符串,但空格将被编码为%20
编辑:
如果您需要保留多个同名cookie:
function parse_cookie($str) {
$cookies = array();
$tok = strtok($str, ';');
while ($tok !== false) {
$a = sscanf($tok, "%[^=]=%[^;]");
$cookies[ltrim($a[0])][] = urldecode($a[1]);
$tok = strtok(';');
}
return $cookies;
}
$str = 'datr=xxx; datr=yyy; datr=zzz; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly';
print_r(parse_cookie($str));
Array
(
[datr] => Array
(
[0] => xxx
[1] => yyy
[2] => zzz
)
[expires] => Array
(
[0] => Wed, 10-Feb-2021 03:05:45 GMT
)
[Max-Age] => Array
(
[0] => 63071999
)
[path] => Array
(
[0] => /
)
[domain] => Array
(
[0] => .facebook.com
)
[secure] => Array
(
[0] =>
)
[httponly] => Array
(
[0] =>
)
)
要分析Cookie的原始值:
,例如
datr=xxx; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly
如果PHP非常简单,请使用:
您可能会注意到,但是我们甚至不需要担心后面的空间代码>。此外,parse_str将执行urldecode
请注意cookie名称中的点(.)和空格()将被下划线(389;)替换。就像。即使允许点(.)
配对功能将是:
echo http_build_query($cookies, '', '; ', PHP_QUERY_RFC3986);
它将转换回原始cookie字符串,但空格将被编码为%20
编辑:
如果您需要保留多个同名cookie:
function parse_cookie($str) {
$cookies = array();
$tok = strtok($str, ';');
while ($tok !== false) {
$a = sscanf($tok, "%[^=]=%[^;]");
$cookies[ltrim($a[0])][] = urldecode($a[1]);
$tok = strtok(';');
}
return $cookies;
}
$str = 'datr=xxx; datr=yyy; datr=zzz; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly';
print_r(parse_cookie($str));
Array
(
[datr] => Array
(
[0] => xxx
[1] => yyy
[2] => zzz
)
[expires] => Array
(
[0] => Wed, 10-Feb-2021 03:05:45 GMT
)
[Max-Age] => Array
(
[0] => 63071999
)
[path] => Array
(
[0] => /
)
[domain] => Array
(
[0] => .facebook.com
)
[secure] => Array
(
[0] =>
)
[httponly] => Array
(
[0] =>
)
)
要分析Cookie的原始值:
,例如
datr=xxx; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly
如果PHP非常简单,请使用:
您可能会注意到,但是我们甚至不需要担心后面的空间代码>。此外,parse_str将执行urldecode
请注意cookie名称中的点(.)和空格()将被下划线(389;)替换。就像。即使允许点(.)
配对功能将是:
echo http_build_query($cookies, '', '; ', PHP_QUERY_RFC3986);
它将转换回原始cookie字符串,但空格将被编码为%20
编辑:
如果您需要保留多个同名cookie:
function parse_cookie($str) {
$cookies = array();
$tok = strtok($str, ';');
while ($tok !== false) {
$a = sscanf($tok, "%[^=]=%[^;]");
$cookies[ltrim($a[0])][] = urldecode($a[1]);
$tok = strtok(';');
}
return $cookies;
}
$str = 'datr=xxx; datr=yyy; datr=zzz; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly';
print_r(parse_cookie($str));
Array
(
[datr] => Array
(
[0] => xxx
[1] => yyy
[2] => zzz
)
[expires] => Array
(
[0] => Wed, 10-Feb-2021 03:05:45 GMT
)
[Max-Age] => Array
(
[0] => 63071999
)
[path] => Array
(
[0] => /
)
[domain] => Array
(
[0] => .facebook.com
)
[secure] => Array
(
[0] =>
)
[httponly] => Array
(
[0] =>
)
)
要分析Cookie的原始值:
,例如
datr=xxx; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly
如果PHP非常简单,请使用:
您可能会注意到,但是我们甚至不需要担心后面的空间代码>。此外,parse_str将执行urldecode
请注意cookie名称中的点(.)和空格()将被下划线(389;)替换。就像。即使允许点(.)
配对功能将是:
echo http_build_query($cookies, '', '; ', PHP_QUERY_RFC3986);
它将转换回原始cookie字符串,但空格将被编码为%20
编辑:
如果您需要保留多个同名cookie:
function parse_cookie($str) {
$cookies = array();
$tok = strtok($str, ';');
while ($tok !== false) {
$a = sscanf($tok, "%[^=]=%[^;]");
$cookies[ltrim($a[0])][] = urldecode($a[1]);
$tok = strtok(';');
}
return $cookies;
}
$str = 'datr=xxx; datr=yyy; datr=zzz; expires=Wed, 10-Feb-2021 03:05:45 GMT; Max-Age=63071999; path=/; domain=.facebook.com; secure; httponly';
print_r(parse_cookie($str));
Array
(
[datr] => Array
(
[0] => xxx
[1] => yyy
[2] => zzz
)
[expires] => Array
(
[0] => Wed, 10-Feb-2021 03:05:45 GMT
)
[Max-Age] => Array
(
[0] => 63071999
)
[path] => Array
(
[0] => /
)
[domain] => Array
(
[0] => .facebook.com
)
[secure] => Array
(
[0] =>
)
[httponly] => Array
(
[0] =>
)
)
真的很喜欢@Andrej的回答。。。但是我想要一个函数(不是类)和一个可以保存多个同名cookie的东西。。。这些答案中没有一个当前可以执行,因为您不能使用具有多个相同名称键的关联数组
函数CookieParser($str){
$cookies=array();
foreach(分解(“;”,$str)为$k=>$v){
预匹配('/^(.*?=(.*?$/i',修剪($v),$matches);
array_push($cookies,array(trim($matches[1]),urldecode($matches[2]));
}
退回$cookies;
}
$CP=CookieParser($_服务器['HTTP_COOKIE']);
生产:
排列
(
[0]=>阵列
(
[0]=>用户名
[1] =>管理员
)
[1] =>阵列
(
[0]=>第页
[1] => 5
)
[2] =>阵列
(
[0]=>第页
[1] => 9
)
)
非常喜欢@Andrej的回答。。。但是我想要一个函数(不是类)和一个可以保存多个同名cookie的东西。。。这些答案中没有一个当前可以执行,因为您不能使用具有多个相同名称键的关联数组
函数CookieParser($str){
$cookies=array();
foreach(分解(“;”,$str)为$k=>$v){
预匹配('/^(.*?=(.*?$/i',修剪($v),$matches);
array_push($cookies,array(trim($matches[1]),urldecode($matches[2]));
}
退回$cookies;
}
$CP=CookieParser($_服务器['HTTP_COOKIE']);
生产:
排列
(
[0]=>阵列
(
[0]=>用户名
[1] =>管理员
)
[1] =>阵列
(
[0]=>第页
[1] => 5
)
[2] =>阵列
(
[0]=>第页
[1] => 9
)
)
非常喜欢@Andrej的回答。。。但是我想要一个函数(不是类)和一个可以保存多个同名cookie的东西。。。这些答案中没有一个当前可以执行,因为您不能使用具有多个相同名称键的关联数组
函数CookieParser($str){
$cookies=array();
foreach(分解(“;”,$str)为$k=>$v){
预匹配('/^(.*?=(.*?$/i',修剪($v),$matches);
array_push($cookies,array(trim($matches[1]),urldecode($matches[2]));
}
退回$cookies;
}
$CP=CookieParser($_服务器['HTTP_COOKIE']);
生产:
排列
(
[0]=>阵列
(
[0]=>用户名
[1] =>管理员
)
[1] =>阵列
(
[0]=>第页
[1] => 5
)
[2] =>阵列
(
[0]=>第页
[1] => 9
)
)
非常喜欢@Andrej的回答。。。但是我想要一个函数(不是类)和一个可以保存多个同名cookie的东西。。。这些答案中没有一个当前可以执行,因为您不能使用具有多个相同名称键的关联数组
函数CookieParser($str){
$cookies=array();
foreach(分解(“;”,$str)为$k=>$v){
预匹配('/^(.*?=(.*?$/i',修剪($v),$matches);
array_push($cookies,array(trim($matches[1]),urldecode($matches[2]));
}
退回$cookies;
}
$CP=CookieParser($_服务器['HTTP_COOKIE']);
生产:
排列
(
[0]=>阵列
(
[0]=>用户名