如何在PHP中最好地解析1个HTTP头值?

如何在PHP中最好地解析1个HTTP头值?,php,parsing,http-headers,Php,Parsing,Http Headers,我的响应中有一个非常重要、详细的HTTP头,我希望解析的值以获得详细信息: Digest realm="My Very, Very Cool Site", nonce="A8W/7aDZBAA=ffc2afd053c8802dd64be69b985f38c85ec29607", algorithm=MD5, domain="/", qop="auth" 它显然是逗号分隔的,但也被引用,因此值可以包含,。还有一个“摘要”,它不是key=“value”-对的一部分。(我可以假设第一部分(“摘要”)

我的响应中有一个非常重要、详细的HTTP头,我希望解析的值以获得详细信息:

Digest realm="My Very, Very Cool Site", nonce="A8W/7aDZBAA=ffc2afd053c8802dd64be69b985f38c85ec29607", algorithm=MD5, domain="/", qop="auth"
它显然是逗号分隔的,但也被引用,因此值可以包含
。还有一个
“摘要”
,它不是
key=“value”
-对的一部分。(我可以假设第一部分(“摘要”)永远不会包含空格,所以这应该不会太难

我认为最可靠的方法是逐字节分析并查找
,但这需要大量的工作


可能是我缺少一个非常有用的PHP SPL函数。我尝试了
http\u parse\u headers()
,但这是不标准的,我没有这个功能。

您可以使用正则表达式:

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();
}
函数parseHeader($theHeaderValue/*不带摘要:part*/){
如果(preg_match_all(“'(?[A-z0-9\\\\\\+)\=(?[\“\']”])(?.*?(?:,|$)'isux“,$theHeaderValue,$matches)和!空($matches['variable']){
$result=array();
foreach($matches['variable']as$index=>$key)$result[$key]=$matches['value'][$index];
返回$result;
}else返回数组();
}