| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | <?phpdeclare(strict_types=1);namespace GuzzleHttp\Psr7;final class Header{    /**     * Parse an array of header values containing ";" separated data into an     * array of associative arrays representing the header key value pair data     * of the header. When a parameter does not contain a value, but just     * contains a key, this function will inject a key with a '' string value.     *     * @param string|array $header Header to parse into components.     */    public static function parse($header): array    {        static $trimmed = "\"'  \n\t\r";        $params = $matches = [];        foreach (self::normalize($header) as $val) {            $part = [];            foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {                if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {                    $m = $matches[0];                    if (isset($m[1])) {                        $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);                    } else {                        $part[] = trim($m[0], $trimmed);                    }                }            }            if ($part) {                $params[] = $part;            }        }        return $params;    }    /**     * Converts an array of header values that may contain comma separated     * headers into an array of headers with no comma separated values.     *     * @param string|array $header Header to normalize.     */    public static function normalize($header): array    {        if (!is_array($header)) {            return array_map('trim', explode(',', $header));        }        $result = [];        foreach ($header as $value) {            foreach ((array) $value as $v) {                if (strpos($v, ',') === false) {                    $result[] = $v;                    continue;                }                foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) {                    $result[] = trim($vv);                }            }        }        return $result;    }}
 |