/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Header.php
PHP | 178 lines | 115 code | 30 blank | 33 comment | 4 complexity | 0ce77dc630d1ec45fb73aea238d578ca MD5 | raw file
- <?php
- namespace Guzzle\Http\Message;
- use Guzzle\Common\Version;
- use Guzzle\Http\Message\Header\HeaderInterface;
- /**
- * Represents a header and all of the values stored by that header
- */
- class Header implements HeaderInterface
- {
- protected $values = array();
- protected $header;
- protected $glue;
- /**
- * @param string $header Name of the header
- * @param array|string $values Values of the header as an array or a scalar
- * @param string $glue Glue used to combine multiple values into a string
- */
- public function __construct($header, $values = array(), $glue = ',')
- {
- $this->header = trim($header);
- $this->glue = $glue;
- foreach ((array) $values as $value) {
- foreach ((array) $value as $v) {
- $this->values[] = $v;
- }
- }
- }
- public function __toString()
- {
- return implode($this->glue . ' ', $this->toArray());
- }
- public function add($value)
- {
- $this->values[] = $value;
- return $this;
- }
- public function getName()
- {
- return $this->header;
- }
- public function setName($name)
- {
- $this->header = $name;
- return $this;
- }
- public function setGlue($glue)
- {
- $this->glue = $glue;
- return $this;
- }
- public function getGlue()
- {
- return $this->glue;
- }
- /**
- * Normalize the header to be a single header with an array of values.
- *
- * If any values of the header contains the glue string value (e.g. ","), then the value will be exploded into
- * multiple entries in the header.
- *
- * @return self
- */
- public function normalize()
- {
- $values = $this->toArray();
- for ($i = 0, $total = count($values); $i < $total; $i++) {
- if (strpos($values[$i], $this->glue) !== false) {
- // Explode on glue when the glue is not inside of a comma
- foreach (preg_split('/' . preg_quote($this->glue) . '(?=([^"]*"[^"]*")*[^"]*$)/', $values[$i]) as $v) {
- $values[] = trim($v);
- }
- unset($values[$i]);
- }
- }
- $this->values = array_values($values);
- return $this;
- }
- public function hasValue($searchValue)
- {
- return in_array($searchValue, $this->toArray());
- }
- public function removeValue($searchValue)
- {
- $this->values = array_values(array_filter($this->values, function ($value) use ($searchValue) {
- return $value != $searchValue;
- }));
- return $this;
- }
- public function toArray()
- {
- return $this->values;
- }
- public function count()
- {
- return count($this->toArray());
- }
- public function getIterator()
- {
- return new \ArrayIterator($this->toArray());
- }
- public function parseParams()
- {
- $params = $matches = array();
- $callback = array($this, 'trimHeader');
- // Normalize the header into a single array and iterate over all values
- foreach ($this->normalize()->toArray() as $val) {
- $part = array();
- foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) {
- preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches);
- $pieces = array_map($callback, $matches[0]);
- $part[$pieces[0]] = isset($pieces[1]) ? $pieces[1] : '';
- }
- $params[] = $part;
- }
- return $params;
- }
- /**
- * @deprecated
- * @codeCoverageIgnore
- */
- public function hasExactHeader($header)
- {
- Version::warn(__METHOD__ . ' is deprecated');
- return $this->header == $header;
- }
- /**
- * @deprecated
- * @codeCoverageIgnore
- */
- public function raw()
- {
- Version::warn(__METHOD__ . ' is deprecated. Use toArray()');
- return $this->toArray();
- }
- /**
- * Trim a header by removing excess spaces and wrapping quotes
- *
- * @param $str
- *
- * @return string
- */
- protected function trimHeader($str)
- {
- static $trimmed = "\"' \n\t";
- return trim($str, $trimmed);
- }
- }