PHP HTTP标头值为数组

时间:2014-12-10 14:12:40

标签: php arrays

我知道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”是我试图解构的值。

2 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:0)

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

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