PHP Velho Oeste 2024

http_negotiate_content_type

(PECL pecl_http >= 0.19.0)

http_negotiate_content_typeСогласовывает предпочтительный для клиента тип контента

Описание

string http_negotiate_content_type ( array $supported [, array &$result ] )

Функция согласовывает с клиентом предпочтительный тип контента, основываясь на переданном HTTP заголовке Accept. Для типов контента указан квалификатор, тип без квалификатора оценивается как наиболее предпочтительный.

Список параметров

supported

Массив, содержащий поддерживаемые типы контента, в качестве значений

result

Массив, который будет заполнен результатами согласования

Возвращаемые значения

Возвращает согласованный тип контента или тип по умолчанию (т.е. первый элемент переданного в функцию массива) если совпадений не найдено.

Примеры

Пример #1 Пример использования http_negotiate_content_type()

<?php
$content_types 
= array('application/xhtml+xml''text/html');
http_send_content_type(http_negotiate_content_type($content_types));
?>

add a note add a note

User Contributed Notes 3 notes

up
2
Vasil Rangelov
16 years ago
Newer versions of this extension fix the bug from the previous note.

Still, if you want to ensure there's no match, you can use the array, as the array will remain empty.

I used this fact in the following technique to ensure good content negotiation between application/xhtml+xml and text/html, since IE sends only "*/*" and thus receives application/xhtml+xml if you use the current sample from the documentation.

<?php
$bestContentType
= http_negotiate_content_type(array('application/xhtml+xml', 'text/html'),
$contentTypes);
$contentType = (empty($contentTypes) ? 'text/html' : $bestContentType);
http_send_content_type($contentType);
?>

Note that at the time of writing, Opera accepts text/html with this approach, because it places application/xhtml+xml with a lower qualifier.
up
1
Pieter van Beek
16 years ago
The documentation says:

Returns the negotiated content type or the default content type (i.e. first array entry) if none match.

It would seem that in fact, this method returns the empty string or NULL if none match.
up
0
Richard Smith
8 years ago
This function hasn't existed for years.  So unless you have an ancient build of pecl_http, you'll need to work out how to use the wholly undocumented HTTP::Header class.
To Top