-2

我的响应中有一个非常重要且详细的 HTTP 标头,我想解析它的值以获取详细信息:

Digest realm="My Very, Very Cool Site", nonce="A8W/7aDZBAA=ffc2afd053c8802dd64be69b985f38c85ec29607", algorithm=MD5, domain="/", qop="auth"

它显然是逗号分隔的,但它也被引用,所以值可以包含,. 还有"Digest "那不是key="value"-pairs的一部分。(我可以假设第一部分(“摘要”)永远不会包含空格,所以这不应该太难。

我认为最可靠的方法是逐字节解析并查找"and ,,但这需要做很多工作。

可能是我错过了一个非常有用的 PHP SPL 函数。我试过 http_parse_headers()了,但那是不标准的,我没有。

4

1 回答 1

0

您可以使用正则表达式:

function parseHeader($theHeaderValue /* Without the Digest: part */) {
  if (preg_match_all("'(?<variable>[A-z0-9\_]+)\=(?<delimiter>[\"\']?)(?<value>.*?)(?<!\\\)\k<delimiter>(?:\s*(?:,|$))'isux", $theHeaderValue, $matches) and !empty($matches['variable'])) {
    $result = array();
    foreach ($matches['variable'] as $index=>$key) $result[$key] = $matches['value'][$index];
    return $result;
  } else return array();
}
于 2013-04-05T18:27:41.613 回答