PluginProbe
Yoast SEO – Advanced SEO with real-time guidance and built-in AI / 27.6
Yoast SEO – Advanced SEO with real-time guidance and built-in AI v27.6
28.5 28.4 28.3 28.2 28.1 28.0 27.9 27.8 27.7 27.6 27.5 trunk 18.0 18.1 18.2 18.3 18.4 18.4.1 18.5 18.5.1 18.6 18.7 18.8 18.9 19.0 All 129 releases
wordpress-seo / vendor_prefixed / guzzlehttp / psr7 / src / Header.php

Header.php in Yoast SEO – Advanced SEO with real-time guidance and built-in AI 27.6, at vendor_prefixed/guzzlehttp/psr7/src/Header.php

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