Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class ContentTypeHeader
00016 {
00017 private $mediaType = null;
00018 private $parameters = array();
00019
00020 private $charset = null;
00021
00025 public static function create()
00026 {
00027 return new self;
00028 }
00029
00033 public function setMediaType($mediaType)
00034 {
00035 $this->mediaType = $mediaType;
00036
00037 return $this;
00038 }
00039
00040 public function getMediaType()
00041 {
00042 return $this->mediaType;
00043 }
00044
00048 public function setParameter($attribute, $value)
00049 {
00050 $this->parameters[$attribute] = $value;
00051
00052 return $this;
00053 }
00054
00058 public function dropParameter($attribute)
00059 {
00060 if (!isset($this->parameters[$attribute]))
00061 throw new MissingElementException();
00062
00063 unset($this->parameters[$attribute]);
00064
00065 return $this;
00066 }
00067
00068 public function hasParameter($attribute)
00069 {
00070 return isset($this->parameters[$attribute]);
00071 }
00072
00073 public function getParameter($attribute)
00074 {
00075 if (!isset($this->parameters[$attribute]))
00076 throw new MissingElementException();
00077
00078 return $this->parameters[$attribute];
00079 }
00080
00084 public function setParametersList($parameters)
00085 {
00086 Assert::isArray($parameters);
00087
00088 $this->parameters = $parameters;
00089
00090 return $this;
00091 }
00092
00093 public function getParametersList()
00094 {
00095 return $this->parameters;
00096 }
00097
00098 public function getCharset()
00099 {
00100 return $this->charset;
00101 }
00102
00106 public function setCharset($charset)
00107 {
00108 if (!$this->charset) {
00109 $this->parameters['charset'] = $charset;
00110 $this->charset = &$this->parameters['charset'];
00111 } else
00112 $this->charset = $charset;
00113
00114 return $this;
00115 }
00116
00122 public function import($string)
00123 {
00124 $this->charset = null;
00125 $this->parameters = array();
00126 $matches = array();
00127
00128 if (
00129 preg_match(
00130 '~^[\s\t]*([^/\s\t;]+/[^\s\t;]+)[\s\t]*(.*)$~',
00131 $string, $matches
00132 )
00133 ) {
00134 $this->mediaType = $matches[1];
00135 $remainingString = $matches[2];
00136
00137 preg_match_all(
00138 '~;[\s\t]*([^\s\t\=]+)[\s\t]*\=[\s\t]*'
00139 .'(?:([^"\s\t;]+)|(?:"(.*?(?<!\\\))"))'
00140 .'[\s\t]*~',
00141 $remainingString, $matches
00142 );
00143
00144 foreach ($matches[1] as $i => $attribute) {
00145 $attribute = strtolower($attribute);
00146
00147 $value =
00148 empty($matches[2][$i])
00149 ? $matches[3][$i]
00150 : $matches[2][$i];
00151
00152 $this->parameters[$attribute] = $value;
00153
00154 if ($attribute == 'charset')
00155
00156 $this->charset = &$this->parameters[$attribute];
00157 }
00158 }
00159
00160 return $this;
00161 }
00162
00163 public function toString()
00164 {
00165 $parts = array($this->mediaType);
00166
00167 foreach ($this->parameters as $attribute => $value) {
00168 $parts[] = $attribute.'="'.$value.'"';
00169 }
00170
00171 return implode('; ', $parts);
00172 }
00173 }
00174 ?>