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.

40 lines
1.6 KiB

4 years ago
# MIME Sniffing
This library aims to be a complete implementation of [the WHATWG Mime Sniffing](https://mimesniff.spec.whatwg.org/) 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:
```php
$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:
```php
$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](https://mimesniff.spec.whatwg.org/#mime-type-groups); these are exposed via the boolean properties `isArchive`, `isAudioVideo`, `isFont`, `isHtml`, `isImage`, `isJavascript`, `isJson`, `isScriptable`, `isXml`, and `isZipBased`. For example:
```php
$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"
```