Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
namespace GuzzleHttp\Psr7;
4
 
5
final class Header
6
{
7
    /**
8
     * Parse an array of header values containing ";" separated data into an
9
     * array of associative arrays representing the header key value pair data
10
     * of the header. When a parameter does not contain a value, but just
11
     * contains a key, this function will inject a key with a '' string value.
12
     *
13
     * @param string|array $header Header to parse into components.
14
     *
15
     * @return array Returns the parsed header values.
16
     */
17
    public static function parse($header)
18
    {
19
        static $trimmed = "\"'  \n\t\r";
20
        $params = $matches = [];
21
 
22
        foreach (self::normalize($header) as $val) {
23
            $part = [];
24
            foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
25
                if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {
26
                    $m = $matches[0];
27
                    if (isset($m[1])) {
28
                        $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);
29
                    } else {
30
                        $part[] = trim($m[0], $trimmed);
31
                    }
32
                }
33
            }
34
            if ($part) {
35
                $params[] = $part;
36
            }
37
        }
38
 
39
        return $params;
40
    }
41
 
42
    /**
43
     * Converts an array of header values that may contain comma separated
44
     * headers into an array of headers with no comma separated values.
45
     *
46
     * @param string|array $header Header to normalize.
47
     *
48
     * @return array Returns the normalized header field values.
49
     */
50
    public static function normalize($header)
51
    {
52
        if (!is_array($header)) {
53
            return array_map('trim', explode(',', $header));
54
        }
55
 
56
        $result = [];
57
        foreach ($header as $value) {
58
            foreach ((array) $value as $v) {
59
                if (strpos($v, ',') === false) {
60
                    $result[] = $v;
61
                    continue;
62
                }
63
                foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) {
64
                    $result[] = trim($vv);
65
                }
66
            }
67
        }
68
 
69
        return $result;
70
    }
71
}