@@ -121,7 +121,7 @@ public function matchesTo(MediaTypeInterface $mediaType): bool
121121        return 
122122            $ this isTypeMatches ($ mediaType
123123            $ this isSubTypeMatches ($ mediaType
124-             $ this isMediaParametersEqual ($ mediaType
124+             $ this isMediaParametersMatch ($ mediaType
125125    }
126126
127127    /** 
@@ -179,6 +179,42 @@ private function isSubTypeEquals(MediaTypeInterface $mediaType): bool
179179        return  strcasecmp ($ this getSubType (), $ mediaTypegetSubType ()) === 0 ;
180180    }
181181
182+     /** 
183+      * @param MediaTypeInterface $mediaType 
184+      * 
185+      * @return bool 
186+      */ 
187+     private  function  isMediaParametersMatch (MediaTypeInterface $ mediaTypebool 
188+     {
189+         if  ($ this bothMediaTypeParamsEmpty ($ mediaTypetrue ) {
190+             return  true ;
191+         } elseif  ($ this bothMediaTypeParamsNotEmptyAndEqualInSize ($ mediaType
192+             // Type, subtype and param name should be compared case-insensitive 
193+             // https://tools.ietf.org/html/rfc7231#section-3.1.1.1 
194+             $ ourParametersarray_change_key_case ($ this getParameters ());
195+             $ parametersToComparearray_change_key_case ($ mediaTypegetParameters ());
196+ 
197+             // if at least one name are different they are not equal 
198+             if  (empty (array_diff_key ($ ourParameters$ parametersToComparefalse ) {
199+                 return  false ;
200+             }
201+ 
202+             // If we are here we have to compare values. Also some of the values should be compared case-insensitive 
203+             // according to https://tools.ietf.org/html/rfc7231#section-3.1.1.1 
204+             // > 'Parameter values might or might not be case-sensitive, depending on 
205+             // the semantics of the parameter name.' 
206+             foreach  ($ ourParametersas  $ name$ value
207+                 if  ($ this paramValuesMatch ($ name$ value$ parametersToCompare$ namefalse ) {
208+                     return  false ;
209+                 }
210+             }
211+ 
212+             return  true ;
213+         }
214+ 
215+         return  false ;
216+     }
217+ 
182218    /** 
183219     * @param MediaTypeInterface $mediaType 
184220     * 
@@ -262,4 +298,18 @@ private function paramValuesEqual(string $name, string $value, string $valueToCo
262298
263299        return  $ valuesEqual
264300    }
301+ 
302+     /** 
303+      * @param string $name 
304+      * @param string $value 
305+      * @param string $valueToCompare 
306+      * 
307+      * @return bool 
308+      */ 
309+     private  function  paramValuesMatch (string  $ namestring  $ valuestring  $ valueToComparebool 
310+     {
311+         $ valuesEqual$ valueToCompare'* '  || $ this paramValuesEqual ($ name$ value$ valueToCompare
312+ 
313+         return  $ valuesEqual
314+     }
265315}
0 commit comments