Salut à tous,
voila je fais des sites depuis plusieurs années, j'ai l'abitude d'utiliser l'encodage ISO-8859-1 pour utiliser les caractères spéicaux comme 'é', 'à', etc...

Cette année, mon prof en programmation web explique que même avec un charset, il faut encoder chaque caractère ('é etc...).
Son point de vue est que pour lui l'affichage dépend du navigateur du client, et du serveur web.

Je trouve cela vraiment bète de prendre du temps à foutre des htmlentities ou bien de chercher chaque codage sachant que les charset sont là pour ca !

C'est pourquoi je voulais avoir votre avis. Est-ce que tous les serveurs (du monde) proposent tous les encodages ? Si non, sommes nous sauvé avec l'utf8 ? et enfin, l'encodage dépend il du client ?

Merci à vous Smiley smile
Modifié par vica (08 Dec 2007 - 20:03)
Bonjour,

Les profs disent parfois des bêtises (ou restent sur des positions valables il y a dix ans...). J'ai eu la même information par un de mes profs il y a deux ans, et à l'évidence il connaissait mal le sujet.

Pour savoir ce qui joue au niveau de l'encodage, je pense qu'un petit tour par la FAQ s'impose:
Comment bien déclarer l'encodage des caractères d'un document ?

Pour ce qui est des points soulevés:

1. Le serveur.
Le serveur ne «gère» pas l'encodage, il se contente de le déclarer (ou pas...) au navigateur via les en-têtes HTTP. La page sur laquelle je rédige ce message a les en-têtes suivants:
Date: Sat, 08 Dec 2007 20:14:58 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) PHP/4.3.10-16
X-Powered-By: PHP/4.3.10-16
Content-Encoding: gzip
Vary: Accept-Encoding
Keep-Alive: timeout=3, max=25
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

200 OK

L'information sur l'encodage est bien transmise, et elle est prioritaire sur ce qui peut être déclaré dans le document. Donc si mon document est en réalité en UTF-8, ça ne passera pas.
Un soucis que l'on rencontre parfois (de moins en moins ces dernières années) c'est que certains serveurs sont configurés pour déclarer par défaut un encodage précis (en général ISO-8859-1), et qu'on n'a pas forcément la possibilité de modifier ce paramètre via un fichier .htaccess par exemple. Je n'ai pas rencontré ce cas de figure ces dernières années avec plusieurs hébergements mutualisés.

2. Le navigateur.
Le navigateur ne décide de l'encodage à utiliser que s'il n'a aucune information, ni dans le document (balise META qui va bien), ni dans les en-têtes HTTP. L'encodage par défaut (c'est-à-dire: qui n'est utilisé que s'il y a un défaut -- c'est-à-dire un manque -- d'information) dépend des réglages de l'utilisateur, et d'un paramètre par défaut souvent lié à la langue du système (c'est souvent soit UTF-8 soit un encodage local comme ISO-8859-1 en Amérique du Nord et en Europe occidentale, SHIFT-JIS au Japon, etc.).
Donc il suffit de bien déclarer l'encodage au moins une fois (balise META ou en-tête HTTP... mais autant que possible on fera les deux!), et on est bon.
Le seul soucis possible, c'est si le navigateur ne gère pas l'encodage annoncé. C'est possible il me semble pour l'UTF-8, pour de très vieux navigateurs. Je n'ai jamais rencontré le problème pour ma part, même avec IE 5.

Conclusion: ton prof devrait mettre ses connaissances à jour dans ce domaine.

Le W3C a tout un tas de documents sur l'internationalisation:
http://www.w3.org/International/getting-started/
Bonsoir,

Je plussoie Florent Smiley murf

J'ajouterais que les entités sont utile dans deux cas de figure:
-Premièrement à des fin d'échappement, c'est à dire éviter que le caractère soit interprété de manière erronée, c'est le cas pour < par exemple (pour éviter qu'il soit interprété comme une balise html). Dans ce cas l'encodage du document ne change absolument rien et ces entités restent indispensables.

-Deuxièmement afin d'afficher un caractère qui n'est pas disponible dans l'encodage courant. Mais au final ce n'est qu'utiliser un autre jeu de caractère plus complet (c.f. wikipedia pour des explications plus détaillées). Donc il n'y a aucun intérêt à passer par les entités si l'encodage utilisé supporte déjà les caractères voulus.



edit:typo Smiley langue
Modifié par Necromantik (08 Dec 2007 - 21:39)
Tout d'abord merci pour vos réponses.

Je pense que s'il dit tout ca, c'est parce que l'on croise de temps en temps des sites ayants des caractères spéciaux, ce qui serait due à une mauvaise entete http ?

Donc si j'ai bien compris ce que vous dites, c'est le navigateur qui se débrouille le caractère qui va bien avec l'encodage et la valeur qu'on lui donne ? Dans ce cas, un problème doit forcément aparaître sur des navigateurs clients d'autres continents, après faut il encore savoir à qui est destiné le contenu du site...

Bon merci à vous, j'essairais d'imposer ce point de vue pour pas me farcir un malus sur ma note (je veux pas me farcir tous mes accents à la main... Smiley langue ).
vica a écrit :
Je pense que s'il dit tout ca, c'est parce que l'on croise de temps en temps des sites ayants des caractères spéciaux, ce qui serait due à une mauvaise entete http ?

Pas nécessairement à un mauvais entête, mais à une mauvaise déclaration de l'encodage oui (celui-ci pouvant aussi être déclaré par une balise meta).
Ou, dans de rares cas, à une mauvaise configuration du navigateur (il est possible de forcer un encodage spécifique plutôt que de le laisser choisir... très mauvaise idée).


vica a écrit :
Donc si j'ai bien compris ce que vous dites, c'est le navigateur qui se débrouille le caractère qui va bien avec l'encodage et la valeur qu'on lui donne ? Dans ce cas, un problème doit forcément aparaître sur des navigateurs clients d'autres continents, après faut il encore savoir à qui est destiné le contenu du site...

Si le jeu de caractères employé est bien déclaré il n'y aura pas de problème, où que le site soit consulté. En effet l'encodage dépend du document et pas du "consulteur" (un é en iso-8859-1 reste un é tant qu'on conserve cet encodage, même lut au japon), donc pour que ça bug il faudrait que l'encodage ne soit pas supporté, hors, comme l'a dit Florent, même IE5 supporte l'UTF8 (et a plus forte raison l'iso-8859-1).

Il y a une nuance tout de même, si le client ne possède pas la police nécessaire à l'affichage d'un caractère (par exemple absence des polices asiatiques) celui-ci apparaitra comme un carré ou point d'interrogation, mais ceci également avec les entités.
Pour terminer, la seule chose que je peux conseiller c'est:

1. Lire ou relire l'item de la FAQ dont je donne le lien dans ma réponse ci-dessus. Le lire attentivement.

2. Relire ma réponse, là encore attentivement.

3. Relire les réponses de Necromantik, là encore avec attention.

Toutes les informations sur tes questions y sont, à toi de les assimiler. Smiley cligne