Aller au contenu

XHTML strict et PHP


Sujets conseillés

Posté

Je sais que c'est sans doute un problème récurrent mais je n'ai pas trouvé de réponse en faisant une recherche sur le forum...

Je n'ai pas un très haut niveau en PHP.

Pour que mes pages soient valides XHTML, et soient correctement affichées il faut que les caractères accentués soient correctement encodés (les classiques é pour é et & pour &)...

Comme je veux pouvoir ajouter ou modifier les données de ma base aussi bien via PHPMyAdmin que via la page d'administration que j'ai créée moi-même, il faut que les caractères problématiques soient modifiés lorsqu'ils sont récupérés dans la base de données.

Pour cela dois-je à un moment un

$str=ereg_replace('&','&',$str);

ou bien y'a t'il un format que je peux utiliser pour mes données qui puisse me simplifier la vie ?

Je m'y perds un peu entre les VARCHAR, TINYTEXT, BLOG etc...

Où puis-je trouver de la doc là dessus ?

Posté

Bonjour Nel :)

Tu peux déclarer le jeu de carcactères ISO-8859-1 dans le <head> de ton doc de la manière suivante :

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Ainsi, tu n'as plus besoin d'encoder les caractères ;)

Posté

J'ai dû mal m'exprimer.

Mes pages utilisent bien le jeu de caractères ISO-8859-1.

Seulement est-ce que cela suffit pour que les caractères spéciaux s'affichent correctement en toute occasion (même sur Mac OS par exemple) ?

De plus si j'affiche un caractère & au moyen de PHP celui-ci sera refusé par la validation XHTML strict...

Ah ils sont beau les standards !!! :fou:

Posté

- tu n'as pas besoin de coder tes caractères étendus (accents par exemple) sous forme d'entité (é) si tu déclares correctement ton jeu de caractères dans le fichier HTML

- les varchar, tinytext et autres sont des types de données pour MySQL et les autres SGBD. Leur rôle est de stocker la donnée, il ne t'aideront jamais à faire autre chose, ils n'ont en particulier rien à voir avec la notion d'échappement HTML

- tu ne devrais jamais utiliser ereg_* mais toujours preg_*

- tu n'as pas besoin d'ereg ou preg pour faire les échappements HTML (mise sous forme d'entités) : htmlspecialchars() et htmlentities() font très bien ça toutes seules

- Par contre, de même que tu dois faire un addslahes pour éviter les apostrophes dans les chaînes SQL, de même que tu dois mettre\" pour faire un guillemet quand tu écris une chaîne PHP, en HTML certains caractères sont spéciaux car ils déclenchent des actions spécifiques. Ce sont en particulier < > et & (début et fin de balise, début d'entité). Il doivent donc être échappés si tu ne veux pas qu'ils soient interprétés et jouent leur rôle "magique". La fonction pour les échapper est htmlspecialchars().

Tous les langages, que ce soit le SQL, le shell, le HTML, ls XML, PHP ou le C, ont des caractères spéciaux pour traiter les données et nécessitent de passer par une fonction d'échappement. Ca n'a rien à voir avec "...les standards..." comme tu sembles les nommer

Posté

Merci Ganf, j'y vois déjà un peu plus clair.

J'ai en effet certainement tendance à tout mélanger :)

Je vais donc me renseigner à propos de cette fameuse fonction "htmlspecialchars()"...

Posté
J'ai dû mal m'exprimer.

Mes pages utilisent bien le jeu de caractères ISO-8859-1.

Seulement est-ce que cela suffit pour que les caractères spéciaux s'affichent correctement en toute occasion (même sur Mac OS par exemple) ?

De plus si j'affiche un caractère & au moyen de PHP celui-ci sera refusé par la validation XHTML strict...

Ah ils sont beau les standards !!!  :fou:

<{POST_SNAPBACK}>

Oui, l'affichage s'effectue correctement, mais pour valider, il faut cependent que tous les caractères spéciaux (& notemment) compris dans les URLs des liens soient correctement encodés avec les entités correspondantes.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...