Mes impressions sur le web, les standards et autres…


Misérable feature

RHAAAA !!!

Mhrr (<- raclement de gorge). Bon, je vous fais un topo. J’étais tranquillement en train de scripter un petit truc. Appel sur un serveur distant pour récupérer les en-têtes renvoyés ainsi que les données (Je précise pour la compréhension de la suite du billet que l’URI appellée renvoie une image PNG…). Précisément, je n’étais pas sùr du fonctionnement précis du deuxième argument de la fonction explode() de PHP (pour séparer les en-têtes des données propres dans la chaîne de caractères reçue). Ainsi :

// appel sur le serveur etc...

$data = '';
while( !@feof($fsock) )
{
    $data .= @fread($fsock, 512);
}
fclose($fsock);

list($headers, $data) = explode("\n\n", str_replace("\r\n", "\n", $data), 3);
list($response) = explode("\n", $headers, 2);

header('Content-Type: text/plain; charset=ISO-8859-1');
echo $headers;
echo "\n\n-----------------\n\n";
echo $data;
echo "\n\n-----------------\n\n";
echo $response;

Ainsi fait, je teste sous Firebird pour voir ce que contiennent mes variables. Voila t-y pas que Firebird me propose de télécharger le fichier ?! Éberlué, je reteste plusieurs fois, et encore et encore (comme un forcené cette fois) avant de me rappeller de la magnifique et indispensable fonctionnalité ajoutée dans les nocturnes précédent la version 0.8 (au jugé fin décembre). Merci mais non merci, j’en veux pas de cette fonctionnalité. Elle me casse les bu^Wnoisettes plus qu’autre chose cette fonctionnalité, bien que je sois conscient qu’elle ait une certaine utilité auprès de l’utilisateur lambda (merci au passage aux crétins qui sont pas fichus de configurer proprement leurs serveurs).

Bien, pour en venir au cœur de ce billet, quelqu’un dans l’assistance saurait-il par bonheur quelle option de configuration dois-je modifier dans mon firebird chéri (qui ne le restera pas s’il n’y a pas de solution) pour qu’il cesse ce comportement des plus agaçants ? Merci d’avance.

Au fait, ça va vous ? Je vous rassure, je ne suis pas mort, juste en manque d’inspiration et de temps ;-)

Bon, j’ai trouvé une première solution pour contourner ce problème. Utiliser plutôt :

header('Content-Type: text/plain; charset=ISO-8859-15');

Au lieu de cette ligne (avec ou sans le charset) :

header('Content-Type: text/plain; charset=ISO-8859-1');

Apparamment, Firefox prend des libertés uniquement si l’en-tête content-type correspond exactement aux réglages par défaut de la plupart des serveurs. Il me manque toujours la solution ultime qui désactive vraiment cette fonctionnalité dans Firefox