An implementation of the WHATWG Mime Sniffing specification
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
J. King c19be2496a Update changelog 3 years ago
lib Remove sniff pattern constants from MimeType class 4 years ago
tests Update standard tests 4 years ago
vendor-bin Don't exclude PHP 8 from requirements 3 years ago
.gitattributes Initial export from Lax 4 years ago
.gitignore Initial export from Lax 4 years ago
.php_cs.dist Initial export from Lax 4 years ago
AUTHORS Initial export from Lax 4 years ago
CHANGELOG Update changelog 3 years ago
LICENSE Initial export from Lax 4 years ago
README.md Document MIME type group feature 4 years ago
RoboFile.php Initial export from Lax 4 years ago
composer.json Don't exclude PHP 8 from requirements 3 years ago
composer.lock Don't exclude PHP 8 from requirements 3 years ago
robo Initial export from Lax 4 years ago
robo.bat Initial export from Lax 4 years ago

README.md

MIME Sniffing

This library aims to be a complete implementation of the WHATWG Mime Sniffing specification. Presently it only implements MIME type parsing (in other words, MIME sniffing itself is not implemented), but it will be expanded in due course.

Features

Parsing

A MIME type string may be parsed into a structured MimeType instance as follows:

$mimeType = \MensBeam\Mime\MimeType::parse("text/HTML; charSet=UTF-8");
echo $mimeType->type;              // prints "text"
echo $mimeType->subtype;           // prints "html"
echo $mimeType->essence;           // prints "text/html"
echo $mimeType->params['charset']; // prints "UTF-8"

Normalizing

Once parsed, a MimeType instance can be serialized to produce a normalized text representation:

$typeString = 'TeXt/HTML;  CHARset="UTF\-8"; charset=iso-8859-1; unset='; 
$mimeType = \MensBeam\Mime\MimeType::parse($typeString);
echo (string) $mimeType; // prints "text/html;charset=UTF-8"

MIME type groups

The MIME Sniffing specification defines a series of MIME type groups; these are exposed via the boolean properties isArchive, isAudioVideo, isFont, isHtml, isImage, isJavascript, isJson, isScriptable, isXml, and isZipBased. For example:

$mimeType = \MensBeam\Mime\MimeType::parse("image/svg+xml");
var_export($mimeType->isImage);      // prints "true"
var_export($mimeType->isXml);        // prints "true"
var_export($mimeType->isScriptable); // prints "true"
var_export($mimeType->isArchive);    // prints "false"