PHP HTTP заголовки значения в виде массива

0

Я знаю, что 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" - это значение Im, пытающееся деконструировать.

  • 1
    нет, нет вы получили именно то, что в заголовках. работа Apache (или PHP) не в том, чтобы понять, каким может быть каждый возможный заголовок http, и проанализировать его для вас. он нашел авторизацию, он дал вам значение в заголовке авторизации. это зависит от вас, чтобы разорвать его на что-то более полезное.
  • 0
    Хорошо, я ничего не видел в документах PHP, но это стоило того, если бы кто-нибудь знал более простой встроенный способ. например, вариант parse_str()
Теги:
arrays

2 ответа

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");
}
0

Я нашел другое решение, которое делает именно то, что вам нужно в одной строке кода:

$pieces = parse_ini_string(str_replace(', ', "\n", $header));
print_r($pieces);
  • 0
    Он потерпит неудачу, если одно из значений содержит «,». Это можно исправить, добавив кавычку перед запятой в заменяемое выражение: str_replace('", ', "\"\n", $header);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню