dokuwiki-matrixnotifierwas-plugin – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | <?php |
2 | |||
3 | declare(strict_types=1); |
||
4 | |||
5 | namespace GuzzleHttp\Psr7; |
||
6 | |||
7 | final class Header |
||
8 | { |
||
9 | /** |
||
10 | * Parse an array of header values containing ";" separated data into an |
||
11 | * array of associative arrays representing the header key value pair data |
||
12 | * of the header. When a parameter does not contain a value, but just |
||
13 | * contains a key, this function will inject a key with a '' string value. |
||
14 | * |
||
15 | * @param string|array $header Header to parse into components. |
||
16 | */ |
||
17 | public static function parse($header): array |
||
18 | { |
||
19 | static $trimmed = "\"' \n\t\r"; |
||
20 | $params = $matches = []; |
||
21 | |||
22 | foreach ((array) $header as $value) { |
||
23 | foreach (self::splitList($value) as $val) { |
||
24 | $part = []; |
||
25 | foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) ?: [] as $kvp) { |
||
26 | if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { |
||
27 | $m = $matches[0]; |
||
28 | if (isset($m[1])) { |
||
29 | $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); |
||
30 | } else { |
||
31 | $part[] = trim($m[0], $trimmed); |
||
32 | } |
||
33 | } |
||
34 | } |
||
35 | if ($part) { |
||
36 | $params[] = $part; |
||
37 | } |
||
38 | } |
||
39 | } |
||
40 | |||
41 | return $params; |
||
42 | } |
||
43 | |||
44 | /** |
||
45 | * Converts an array of header values that may contain comma separated |
||
46 | * headers into an array of headers with no comma separated values. |
||
47 | * |
||
48 | * @param string|array $header Header to normalize. |
||
49 | * |
||
50 | * @deprecated Use self::splitList() instead. |
||
51 | */ |
||
52 | public static function normalize($header): array |
||
53 | { |
||
54 | $result = []; |
||
55 | foreach ((array) $header as $value) { |
||
56 | foreach (self::splitList($value) as $parsed) { |
||
57 | $result[] = $parsed; |
||
58 | } |
||
59 | } |
||
60 | |||
61 | return $result; |
||
62 | } |
||
63 | |||
64 | /** |
||
65 | * Splits a HTTP header defined to contain a comma-separated list into |
||
66 | * each individual value. Empty values will be removed. |
||
67 | * |
||
68 | * Example headers include 'accept', 'cache-control' and 'if-none-match'. |
||
69 | * |
||
70 | * This method must not be used to parse headers that are not defined as |
||
71 | * a list, such as 'user-agent' or 'set-cookie'. |
||
72 | * |
||
73 | * @param string|string[] $values Header value as returned by MessageInterface::getHeader() |
||
74 | * |
||
75 | * @return string[] |
||
76 | */ |
||
77 | public static function splitList($values): array |
||
78 | { |
||
79 | if (!\is_array($values)) { |
||
80 | $values = [$values]; |
||
81 | } |
||
82 | |||
83 | $result = []; |
||
84 | foreach ($values as $value) { |
||
85 | if (!\is_string($value)) { |
||
86 | throw new \TypeError('$header must either be a string or an array containing strings.'); |
||
87 | } |
||
88 | |||
89 | $v = ''; |
||
90 | $isQuoted = false; |
||
91 | $isEscaped = false; |
||
92 | for ($i = 0, $max = \strlen($value); $i < $max; ++$i) { |
||
93 | if ($isEscaped) { |
||
94 | $v .= $value[$i]; |
||
95 | $isEscaped = false; |
||
96 | |||
97 | continue; |
||
98 | } |
||
99 | |||
100 | if (!$isQuoted && $value[$i] === ',') { |
||
101 | $v = \trim($v); |
||
102 | if ($v !== '') { |
||
103 | $result[] = $v; |
||
104 | } |
||
105 | |||
106 | $v = ''; |
||
107 | continue; |
||
108 | } |
||
109 | |||
110 | if ($isQuoted && $value[$i] === '\\') { |
||
111 | $isEscaped = true; |
||
112 | $v .= $value[$i]; |
||
113 | |||
114 | continue; |
||
115 | } |
||
116 | if ($value[$i] === '"') { |
||
117 | $isQuoted = !$isQuoted; |
||
118 | $v .= $value[$i]; |
||
119 | |||
120 | continue; |
||
121 | } |
||
122 | |||
123 | $v .= $value[$i]; |
||
124 | } |
||
125 | |||
126 | $v = \trim($v); |
||
127 | if ($v !== '') { |
||
128 | $result[] = $v; |
||
129 | } |
||
130 | } |
||
131 | |||
132 | return $result; |
||
133 | } |
||
134 | } |