RFC 6838 Media Type (MIME type) parsing and comparison.
composer require noresources/ns-php-mediatype ~1.0
use NoreSources\MediaType\MediaType;�
use NoreSources\MediaType\MediaTypeFactory;�
use NoreSources\MediaType\MediaRange;
$factory = MediaTypeFactory::getInstance ();
$mediaType = $factory->createFromString ('text/vnd.noresources.incredibly.flexible+xml');
var_dump ($mediaType->getMainType()); i // "text"
var_dump ($mediaType->getStructuredSyntax()); // "xml"
$subType = $mediaType->getSubType ();
var_dump (\strval ($subType)); // "vnd.noresources.incredibly.flexible+xml"
var_dump ($subType->getFacets()); // [ "vnd", "noresources", "incredibly", "flexible" ]
// From a file or a stream
$mediaType = $factory->createFromMedia ('path/to/filename.html');
var_dump (\strval ($mediaType)); // "text/html"
// Media range is also recognized
$range = $factory->createFromString ('image/*');
// Comparing
$html = $factory->createFromString ('text/html');
$anyText = $factory->createFromString ('text/*');
$any = $factory->createFromString ('*/*');
var_dump ([
'text/html vs text/*' => MediaRange::compare ($html, $anyText),
'text/* vs */*' => MediaRange::compare ($anyText, $any),
'*/* vs text/html' => MediaRange::compare ($any, $html)
]);
/*
array(3) {
["text/html vs text/*"]=> int(1)
["text/* vs */*"]=> int(1)
["*/* vs text/html"]=> int(-1)
}
*/