Dateiheader als Array mit Regular Expression

ZodiacXP

Erfahrenes Mitglied
Hi. Brauche Hilfe bei einem Pattern.

Der Header:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Date: Thu, 05 Mar 2009 11:57:57 GMT
Expires: -1
Content-Type: text/html; charset=ISO-8859-1
Server: gws
Transfer-Encoding: chunked

Soll in einer Arrayform, was mein jetziges Pattern auch relativ gut schafft:
Code:
([\w-]*?):[\s*]([^\r&^\n&^\r\n]*)

Gibt es dafür eine bessere / schnellere Variante?

Das ganze geht über preg_match_all().
 
Zuletzt bearbeitet:
Moin,

Code:
/^([\w-]*?):(.*)/m

Durch die Flag m(ultiline) findet ^ nicht nur den Beginn des Strings, sondern den Beginn jeder einzelnen Zeile.
 
Du müsstest eine Besonderheiten beachten: Header-Felder dürfen sich auch über mehrere Zeilen erstrecken (hat technischen Ursprung). Das solltest du erst einmal rückgängig machen:
PHP:
preg_replace('/[\r\n]+\s+/s', ' ', $str)
Danach steht jedes Header-Feld in nur einer Zeile.
 
Ah. Super. Kann dich leider noch nich bewerten.
Danke euch beiden.

PHP:
/**
 * Convert given Header-Information in Array (field => value)
 *
 * @param string $Header
 * @return array
 */
function HeaderArray($Header)
{
  // fields: multi-line to single-line
  $Header = preg_replace('/[\r\n]+\s+/s', ' ', $Header);
  // Lookup fields and value
  preg_match_all('/^([\w-]*?):[\s*](.*)/m', $Header, $aHeader);
  // return in one Array
  return array_combine($aHeader[1], $aHeader[2]);
}
 
Zuletzt bearbeitet:
Zurück