OVH Cloud OVH Cloud

deviner le charset d'un fichier html local

21 réponses
Avatar
pere.noel
j'ai une petite appli qui transforme des fichiers html locaux :

html -> xhtml -> ajout d'un menu -> publication (en xhtml mais avec
l'extension html.

bon, la conversion html -> xhtml se fait par tidy, à qui je dois donner
le charset entrant (en sortie je bascule tout en UTF-8)

là j'ai un problème de détection, je vien de faire un petit script ruby
qui détecte le charset, résultat des courses : 10 fichiers sur 26 n'ont
pas défini le charset dans une balise meta.

sur "fr.comp.infosystemes.www.auteurs" "on" me dit que cette balise
n'est qu'un pis-aller.

qu'il faut utiliser l'en-tête HTTP, ce qui n'est pas possible dans mon
cas vu que les fichiers sont locaux, sauvegardés dans un répertoire...

perso je pense attribuer "US-ASCII" à tous les fichiers qui ne déclarent
pas leur charset, par ce que c'est mieux que rien.

notes que je converti tout en UTF-8 pparce que j'ajoute de l'UTF-8 à la
page en question.

pensez-vous que ce soit uen bonne idée ???

savez vous qqc sur l'autodéttection du charset par les navigateurs ?

--
une bévue

10 réponses

1 2 3
Avatar
Eric Jacoboni
jose.campos+ (José Campos) writes:

C'est quoi, $_SERVER[] ?


Une "variable pré-définie"


De PHP...

Je vois mal comment l'encodage d'un document HTML pourrait apparaître
dans les infos sur les paramètres du serveur.

--
Eric Jacoboni, ne il y a 1445998638 secondes


Avatar
pere.noel
Eric Jacoboni wrote:


Je vois mal comment l'encodage d'un document HTML pourrait apparaître
dans les infos sur les paramètres du serveur.


pourtant c'est ce qu'on me dit sur "fr.comp.infosystemes.www.auteurs"
que cette info est dans les en-têtes http et même que c'est une
aberration de mettre le charset dans le fichier si son charset est
inconnu (boucle)...

enfin, j'ai un très mauvais souvenir de cela, mais il faut dire avec
wanadoo..., j'avais, il y a des années des scripts vrml sur mes pages,
ils avaient l'extension "wrl", le contenu était du texte tout ce qu'il y
a de plus banal.

eh bien chez wanadoo le serveur m'écrasait systématiquement qq lignes
(les plus importantes pour la détection) du début de mes scripts.

je tél chez awnadoo, fini par obtenir "le chef de plateau" au bout du
fil qui me dit simplement que leur serveur ne sait pas faire avec du
vrml (le site était ok 1 ou 2 années auparavant chez le même FAI).

j'étais sur-excité... lui expliquer que mes scripts n'étaient que du
texte us-ascii, qu'ilas avaient marchés chez eux etc...

rien à faire !

le workover (comme dirait Luc ;-)) fut simplement de renommer mess
cripts en machin.txt au lieu de bidule.wrl...
--
une bévue

Avatar
lap

Même si, comme me le recommande madame W3C[1], je colle :

<?xml version="1.0" encoding="UTF-8"?>
et
<meta http-equiv='content-type' content='text/html; charset=utf-8' />


oui j'ai déjà vu ça, un apache configuré pour prétendre
que toutes les pages qu'il sert sont en utf-8, ou en iso-8859-1. Et
mon safari suivait aveuglément ce que lui disait le serveur, sans
regarder les entêtes en haut de page html.

LaP

Avatar
ASM

enfin, j'ai un très mauvais souvenir de cela, mais il faut dire avec
wanadoo...,


J'ai comme l'impression que chez wanadoo le serveur (au moins les sites
page perso) aucune en-tête de charset n'est envoyée ...

Sans doute pour que, justement, ce soit le charset indiqué dans la page
qui soit reconnu ?

Sinon, sur ton sitos page perso, comment fais-tu pour indiquer côté
serveur tel ou tel charset en fonction de la page envoyée ?

scripts vrml sur mes pages,
extension "wrl", (contenu texte banal).

rien à faire !

le workover (comme dirait Luc ;-)) fut simplement de renommer mess
cripts en machin.txt au lieu de bidule.wrl...


Je viens de regarder chez moi et marche pô, en effet
Ha! Ben ! le fichier *.wrl a disparu ! :-((


Et ça fonctionne maintenant en *.txt ?
Page exemple ?


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
lap wrote:

mon safari suivait aveuglément ce que lui disait le serveur, sans
regarder les entêtes en haut de page html.


OK, maintenant que tu en parles, je me souviens d'une page avec les
en-têtes en utf-8 mais que Firefox s'obstine à ouvrir en cyrillique, :
<http://www.aha.ru/~nick77/indexFr.htm>


ben ... sur un domaine "Russe" de quoi t'étonnes-tu ?
à part les é è à ù, le reste semble OK (FireFox)

les en-têtes côté serveur :
Response Headers - http://www.aha.ru/~nick77/indexFr.htm
Date: Fri, 17 Mar 2006 11:00:35 GMT
Server: Apache/1.3.26 (Unix)
Last-Modified: Mon, 09 Jan 2006 00:31:07 GMT
Etag: "32a8f-12d3-43c1aecb"
Accept-Ranges: bytes
Content-Length: 4819
Content-Type: text/html; charset=windows-1251 <-- cyrilique
Content-Language: ru
Age: 214046

de plus :
il y a un p'tit grigri avant le doctype (il ne faut rien de rien avant,
même pas un espace)

Si c'est une page à toi :
essayer de mettre le meta du charset immediatement après balise
d'ouverture du head (qque fois que ...)

il y a pleins d'espaces glissés dans les balises et qui pourraient
mettre la zone

voici ce que me dit Tidy pour cette page :
line 1 column 1 - Warning: missing <!DOCTYPE> declaration

etc etc : en gros -> le zigouigoui avant le doctype gène un peu

line 20 column 1 - Warning: discarding unexpected <body>
line 54 column 15 - Warning: missing </a> before <a>
line 60 column 1 - Warning: discarding unexpected </a>
line 65 column 36 - Warning: '<' + '/' + letter not allowed here
line 62 column 1 - Warning: <script> inserting "type" attribute

0 erreur / 24 avertissements

Si la correction du doctype n'apporte rien il ne restera qu'à convertir
les accentués en html-entités ( é = &eacute; )




--
Stephane Moriaux et son [moins] vieux Mac


Avatar
lists
Eric Jacoboni wrote:

Je vois mal comment l'encodage d'un document HTML pourrait apparaître
dans les infos sur les paramètres du serveur.


D'après ce que j'ai compris, on peut le voir avec telnet:

% telnet www.juliensalort.org 80
Trying 213.186.33.40...
Connected to juliensalort.org.
Escape character is '^]'.
GET index.html HTTP/1.0

HTTP/1.1 301 Moved Permanently
Date: Fri, 17 Mar 2006 11:42:13 GMT
Server: Apache
Location: http://300gp.ovh.netindex.html/
Connection: close
Content-Type: text/html; charset=iso-8859-1

Là le serveur indique que le fichier HTML qui suit est codé en
ISO-8859-1.

--
R: Parce que ça renverse bêtement l'ordre naturel de lecture!
Q: Mais pourquoi citer en fin d'article est-il si effroyable?
R: Citer en fin d'article
Q: Quelle est la chose la plus désagréable sur les groupes de news?

Avatar
Eric Jacoboni
(Julien Salort) writes:


Là le serveur indique que le fichier HTML qui suit est codé en
ISO-8859-1.


Oui, le content-type du document HTML que tu as demandé : cela ne
dépend donc pas du serveur, mais du document, non ? On se comprend
peut-être mal, mais pour moi, un content-type, c'est lié à UN
document, pas au serveur. Sinon, je ne vois pas comment le même
serveur pourrait servir des documents encodés différemment. Mais,
bon... je ne suis pas un grand spécialiste de la chose.

Si le fameux $_SERVER[] correspond bien à ce que je pense, à un
tableau contenant les variables d'environnement du serveur et du
script, voilà ce que j'obtiens (en Ruby/CGI, ça s'appelle ENV) :

AUTH_TYPE
DOCUMENT_ROOT
GATEWAY_INTERFACE
HTTP_ACCEPT
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_CONNECTION
HTTP_COOKIE
HTTP_HOST
HTTP_IF_MODIFIED_SINCE
HTTP_USER_AGENT
MOD_RUBY
PATH
REMOTE_ADDR
REMOTE_PORT
REMOTE_USER
REQUEST_METHOD
REQUEST_URI
SCRIPT_FILENAME
SCRIPT_NAME
SERVER_ADDR
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SIGNATURE
SERVER_SOFTWARE
UNIQUE_ID
--
Eric Jacoboni, ne il y a 1446038315 secondes

Avatar
pere.noel
Julien Salort wrote:


Là le serveur indique que le fichier HTML qui suit est codé en
ISO-8859-1.


ouais mais ce n'est pas tous les serveurs qui font ça, l'info charset
n'est pas obligatoire (w3c) dans l'en-tête, elle n'est pas obligatoire
dans une balise meta non plus (dixit w3c) par contre, l'info, en
elle-même doit être présente mais où, compte-tenu de ce qui précède...


--
une bévue

Avatar
pere.noel
Une bévue wrote:


ouais mais ce n'est pas tous les serveurs qui font ça, l'info charset
n'est pas obligatoire (w3c) dans l'en-tête, elle n'est pas obligatoire
dans une balise meta non plus (dixit w3c) par contre, l'info, en
elle-même doit être présente mais où, compte-tenu de ce qui précède...


dans l'un des deux m'a t'on prcisé sur
"fr.comp.infosystemes.www.auteurs".

--
une bévue

Avatar
Erwan David
jose.campos+ (José Campos) écrivait :

Erwan David wrote:

C'est pourtant tellement reposant de coller un charset utf-8 oukifo
et ensuite de taper sans soucis ;-)


Encore faut-il que le serveur de l'hébergeur envoie le bon en-tête...


Même si, comme me le recommande madame W3C[1], je colle :

<?xml version="1.0" encoding="UTF-8"?>
et
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
?


Ça c'est l'en-tête HTML, il y a aussi l'en-tête HTTP, qui se règle
dans la configuration du serveur...

D'ailleurs, comment récupère-t-on le dit en-tête? je ne le vois pas
dans $_SERVER[].


On fait la transaction HTTP à la main.

--
Si vous embauchez, voici mon CV
http://www.rail.eu.org/cv/cv.pdf



1 2 3