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.
http_negotiate_content_type
(PECL pecl_http:0.19.0-1.5.5)
http_negotiate_content_type — クライアントが希望している content type を選択する
説明
string http_negotiate_content_type
( array $supported
[, array &$result
] )
この関数は、クライアントが希望している content type を Accept HTTP ヘッダに基づいて選択します。 qualifier も理解し、qualifier の指定されていない content type が最優先されます。
パラメータ
- supported
-
サポートする content type を値にもつ配列。
- result
-
選択した結果がこの配列に含まれます。
返り値
選択された content type、あるいは一致するものがなかった場合はデフォルトの content type (配列の最初のエントリ) を返します。
例
例1 http_negotiate_content_type() の使用例
<?php
$content_types = array('application/xhtml+xml', 'text/html');
http_send_content_type(http_negotiate_content_type($content_types));
?>
http_negotiate_content_type
Vasil Rangelov
21-Sep-2007 02:18
21-Sep-2007 02:18
Pieter van Beek
03-Jul-2007 06:38
03-Jul-2007 06:38
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.
