Do zrobienia strony uzyłem XTML, przy czym wewnątrz znajdują się fragmenty kodu php
a co za tym idzie plik muszę zapisać z rozszerzeniem 'php'. Serwer Apache na którym
mam tą stronkę wysyła taki plik jako text/html pomimo, że w tym pliku w zanczniku meta
Content-type ustawione jest na application/xhtml+xml. Co należy zrobić aby przeglądarka
traktowała to jako application/xhtml+xml?</quote>
Na samym początku pliku (przed czymkolwiek innym!):
<?php header("Content-type: application/xhtml+xml"); ?>
Skoro masz PHP, to możesz go użyć także do wysłania własnego nagłówka.
I swoją drogą pamiętaj, że strony z takim typem MIME nie otworzy Internet Explorer w żadnej wersji.
Wielkie dzięki! Właśnie o to mi chodziło. Jestem świadomy tego, że IE nie poradzi sobie z tym typem MIME i zamierzam zastosować rozwiązanie, które zanalazłem na stronie
http://www.antylameriada.net/wxhtmlmime/
do obejścia tego problemu</url>
To nie stosuj tego rozwiązania, tylko takie:
<?php
$xhtml = false;
if (preg_match('/application\/xhtml\+xml(?![+a-z])(;q=(0\.\d{1,3}|[01]))?/i', $_SERVER['HTTP_ACCEPT'], $matches)) {
$xhtmlQ = isset($matches[2])?($matches[2]+0.2)Ʌ
if (preg_match('/text\/html(;q=(0\d{1,3}|[01]))s?/i', $_SERVER['HTTP_ACCEPT'], $matches)) {
$htmlQ = isset($matches[2]) ? $matches[2] : 1;
$xhtml = ($xhtmlQ >= $htmlQ);
} else {
$xhtml = true;
}
}
if ($xhtml) {
header('Content-Type: application/xhtml+xml; charset=utf-8');
} else {
header('Content-Type: text/html; charset=utf-8');
}
?>
Jest dłuższe, ale bardziej poprawne (tylko charset w wysyłanych nagłówkach dostosuj do swoich potrzeb, ewentualnie usuń), bo także prawidłowo obsługuje priorytety w nagłówkach HTTP. I gdy przyjdzie jakaś przeglądarka, która powie, że application/xhtml+xml ma priorytet równy zero, to go nie dostanie, a w rozwiązaniu wyżej - tak.
A kto wie co będzie mówić Internet Explorer 8 ;-)
Super! Przyda się bardzo. Ale pojawił się kolejny problem. Teraz początek mojego pliku wygląda tak:
<?php
if(strstr($_SERVER['HTTP_ACCEPT'], "application/xhtml+xml")) {
header("Content-Type: application/xhtml+xml");
}
else {
header("Content-Type: text/html");
}
?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-type" content="application/xhtml+xml; charset=utf-8" />
.
.
.
W przeglądarce wszystko działa zgodnie z oczekiwaniami ale strona nie przechodzi testu http://validator.w3.org/ a zalezy mi na tym. Jak się koledzy webmasetrzy na to zapatrujecie?
Dodam jeszcze, ze jak zastosuje samo:
<?php header("Content-type: application/xhtml+xml"); ?>
to strona jest poprawnie walidowana przez w3cValidator. Wywnioskowałem tez,
ze problem jest z $_SERVER['HTTP_ACCEPT']
Po prostu walidator "przedstawia się", że nie akceptuje application/xhtml+xml. Błąd walidatora :-)
Niemniej test powinno przechodzić, co najwyżej z ostrzeżeniem.