PHP HTTP 标头值作为数组


PHP HTTP headers values as array

我知道getallheaders()函数给了我一个http标头数组。但它给出了一个键 - 值,例如

[Authorization] => oauth_consumer_key="publica5d53e674542272aefc2ea8ebf99bf9d771ed2b089bdfd1fbb74b5de69", oauth_signature="c7f63e8c01131d4384cdfe2cee5db7ce160aa27b", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1418220427", oauth_nonce="5488538b485ed", oauth_version="1.0"

除了手动分解数据之外,有没有办法将上面的值转换为不带引号的关联数组?

更新

需要明确的是,上面是一个PHP数组的键值,其中[Authorization]是键,oauth_consumer_key="publica5d53e674542272aefc2ea8ebf99bf9d771ed2b089bdfd1fbb74b5de69", oauth_signature="c7f63e8c01131d4384cdfe2cee5db7ce160aa27b", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1418220427", oauth_nonce="5488538b485ed", oauth_version=“1.0”是我试图解构的值。

您可以尝试一个简单的正则表达式:

$matches = array();
preg_match_all('/('w+)="([^"]+)", /', $header.', ', $matches, PREG_SET_ORDER);
foreach ($matches as $match) {
    echo($match[1].' -> '.$match[2]."'n");
}

我在标题后附加了", "(逗号和空格)以简化正则表达式。

或者,您可以尝试手动解析字符串:

foreach (explode(', ', $header) as $item) {
    list($key, $value) = explode('=', $item);
    $value = trim($value, '"');
    echo($key.' -> '.$value."'n");
}

我找到了另一种解决方案,可以在一行代码中完全满足您的需求:

$pieces = parse_ini_string(str_replace(', ', "'n", $header));
print_r($pieces);