Forum Programmation.php php, xhtml, header et Content-type

Posté par .
Tags : aucun
0
19
oct.
2008
Bonjour,

mon espace d'hébergement personnel chez free me permet d'héberger un blog dotclear (php).

Je voudrai renommer le flux en Content-Type: application/xhtml+xml.
Jusque là, c'est simple, il faut agir sur l'en tête http du message envoyé depuis le serveur vers le client, d'après ce que j'ai compris.

Il y a plusieurs stratégies pour faire cela, d'après cette page.

Le problème est que le serveur apache ne me permet pas grand chose. Dans le script d'index, j'ai le test traditionnel :

$accept_xml =
!empty($_SERVER['HTTP_ACCEPT']) &&
strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml') !== false;

if (dc_send_real_xml && $accept_xml) {
header('Content-Type: application/xhtml+xml');
} else {
header('Content-Type: text/html; charset='.dc_encoding);
}

if ($accept_xml) {
echo '<?xml version="1.0" encoding="'.dc_encoding.'"?>'."\n";
}


Voilà ce que me renvoie var_dump($_SERVER['HTTP_ACCEPT']) :
string(54) "text/html, image/jpeg, image/png, text/*, image/*, */*"
Que suis-je sensé faire pour permettre à mon blog de mettre l'en-tête http à
'Content-Type: application/xhtml+xml' ?

Merci d'avance pour vos réponses.
  • # traditionnel ?

    Posté par (page perso) . Évalué à 4.

    Si c'est le test traditionnel, change de tradition :)

    Ton client dit qu'il prefere du "text/html", si ce n'est pas possible il accepte aussi du "image/jpeg", ... et finit par "*/*" pour dire qu'il accepte n'importe quoi.

    Donc tu peux lui envoyer n'importe quoi.
    • [^] # Re: traditionnel ?

      Posté par . Évalué à 2.

      D'accord, mais alors, serait-ce à dire que dotclear est « buggé » ?

      En effet, quel besoin a dotclear d'envoyer en "text/html" si le client accepte */* ?

      En fait, il vérifie si le client accepte "application/xhtml+xml" d'après la chaîne $_SERVER['HTTP_ACCEPT'] et avec la fonction strpos, mais tous les flux sont acceptés autrement. J'aimerai bien qu'il puisse envoyer ça sans vérification en "application/xhtml+xml", mais :

      1) Ça demande des hacks sérieux dans le code de dotclear.
      2) Internet Explorer 6 risque de ne pas accepter de lire le blog correctement.

      Le point 1 ne me pose pas trop de problème (encore que), mais le point 2 laisse subsister ma retenue à vouloir envoyer ce flux comme "application/xhtml+xml".

      Donc en fait, la solution serait d'envoyer du "application/xhtml+xml" par défaut et d'envoyer du texte autrement ?

      Je ne connais pas les types mimes acceptés par IE, mais le http_accept précédemment donné était pour konqueror, qui devrait gérer le application/xhtml+xml normalement. De plus, IE doit certainement accepter */*. Alors, que faire ? Cette situation est vraiment difficile à gérer. Trois solutions :
      1) faire des hacks dans dotclear.
      2) trouver un autre CMS qui fait les choses un peu mieux.
      3) écrire mon propre engin de blog.

      Je suis près pour la première, vu que j'ai déjà commencé dans cette voie.
      • [^] # Re: traditionnel ?

        Posté par (page perso) . Évalué à 1.

        En effet, quel besoin a dotclear d'envoyer en "text/html" si le client accepte */* ?
        
        Parce que la négociation ne fonctionne pas comme ça. [cf http://httpd.apache.org/docs/2.0/content-negotiation.html#be(...)]
        text/html, image/jpeg, image/png, text/*, image/*, */*
        
        Un */* signifie j'accepte par défaut n'importe quoi, mais si tu as du text/html je préfère... Si application/xhtml+xml avait été donnée par le navigateur, ça aurait été servi (première ligne du code).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.