mime [jak zmienić]

0

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>

0

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.

0

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>

0

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 ;-)

0

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?

0

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']

0

Po prostu walidator "przedstawia się", że nie akceptuje application/xhtml+xml. Błąd walidatora :-)
Niemniej test powinno przechodzić, co najwyżej z ostrzeżeniem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1