public function negotiateMimeType($supported, $default)
    {
        $supp = array();
        foreach ($supported as $type) {
            $supp[strtolower($type)] = $type;
        }

        if (!count($supp)) {
            return $default;
        }

        if (isset($_SERVER['HTTP_ACCEPT'])) {
            $accepts = $this->sortAccept($_SERVER['HTTP_ACCEPT']);

            foreach ($accepts as $type => $q) {
                if (substr($type, -2) != '/*') {
                    if (isset($supp[$type])) {
                        return $supp[$type];
                    }
                    continue;
                }
                if ($type == '*/*') {
                    return array_shift($supp);
                }
                list($general, $specific) = explode('/', $type);
                $general .= '/';
                $len = strlen($general);
                foreach ($supp as $mime => $t) {
                    if (strncasecmp($general, $mime, $len) == 0) {
                        return $t;
                    }
                }
            }
        }

        return $default;
    }
public function negotiateMimeType($supported, $default)
    {
        $supp = array();
        foreach ($supported as $type) {
            $supp[strtolower($type)] = $type;
        }

        if (!count($supp)) {
            return $default;
        }

        if (isset($_SERVER['HTTP_ACCEPT'])) {
            $accepts = $this->sortAccept($_SERVER['HTTP_ACCEPT']);

            foreach ($accepts as $type => $q) {
                if (substr($type, -2) != '/*') {
                    if (isset($supp[$type])) {
                        return $supp[$type];
                    }
                    continue;
                }
                if ($type == '*/*') {
                    return array_shift($supp);
                }
                list($general, $specific) = explode('/', $type);
                $general .= '/';
                $len = strlen($general);
                foreach ($supp as $mime => $t) {
                    if (strncasecmp($general, $mime, $len) == 0) {
                        return $t;
                    }
                }
            }
        }

        return $default;
    }
public function negotiateMimeType ( $ supported , $ default ) { $ supp = array ( ) ; foreach ( $ supported as $ type ) { $ supp [ strtolower ( $ type ) ] = $ type ; } if ( ! count ( $ supp ) ) { return $ default ; } if ( isset ( $ _SERVER [ 'HTTP_ACCEPT' ] ) ) { $ accepts = $ this -> sortAccept ( $ _SERVER [ 'HTTP_ACCEPT' ] ) ; foreach ( $ accepts as $ type => $ q ) { if ( substr ( $ type , - 2 ) != '/*' ) { if ( isset ( $ supp [ $ type ] ) ) { return $ supp [ $ type ] ; } continue ; } if ( $ type == '*/*' ) { return array_shift ( $ supp ) ; } list ( $ general , $ specific ) = explode ( '/' , $ type ) ; $ general .= '/' ; $ len = strlen ( $ general ) ; foreach ( $ supp as $ mime => $ t ) { if ( strncasecmp ( $ general , $ mime , $ len ) == 0 ) { return $ t ; } } } } return $ default ; }
Negotiates content type with the user's browser through the Accept
HTTP header.

Quality factors in the Accept: header are supported, e.g.:
Accept: application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8

<code>
require_once 'HTTP2.php';
$http = new HTTP2();
$contentType = array(
'application/xhtml+xml',
'application/xml',
'text/html',
'text/plain',
);
$mime = $http->negotiateMimeType($contentType);
</code>

@param array  $supported An associative array of supported MIME types.
@param string $default   The default type to use if none match.

@return string The negotiated MIME type result or the supplied default.
@author Philippe Jausions <jausions@php.net>
Negotiates content type with the user s browser through the Accept HTTP header .