8722 sujets

Développement web côté serveur, CMS

Bonjour,

Je vais résumer ma situation :

Je crée un site PHP avec des formulaires de saisies pour les utilisateurs. Les données sont ensuite stockées dans une base MySQL. Certains champs seront affichés tels quels, d'autres passent pas un parser wiki. Je souhaite utiliser l'encodage [b]ISO-8859-1[/i].

Si j'ai bien compris, je dois faire en sorte d'enregistrer mes fichiers HTML, PHP, et les autres (JS, CSS, ...) aussi je suppose, en choisissant l'encodage ISO-8859-1.

Pour assurer une certaine pérennité à mon site web, quelles sont selon vous les traîtements à appliquer sur les chaînes :
* avant stockage dans la BD
* éventuellement avant affichage

Jusqu'à présent j'ai utilisé
htmlspecialchars($chaines, ENT_QUOTES)
// convertit ", ', <, > et & en entités HTML
avant stockage et rien après. Seulement je viens d'apprendre que certains caractères saisies (€, œ, ...) pourraient ête invalides dans l'encodage choisi.

Avant le stockage dans la base de données :
* Dois-je conserver htmlspecialchars ?
* Dois-je utiliser une autre fonction (par exemple addslashes, mysql_real_espace_string ou mysql_escape_string) qui se contenterait juste d'inhiber les cractères reservés (apostrophes), ceci afin de stocker le texte brut et d'améliorer sa pérennité ?

En bref, est-ce que le fait de stocker des fichiers dont certains sont déjà encodés en entités HTML peut selon vous poser des problèmes par la suite (modification des entités, exploitation de ces données sur un autre support...) ?

Vient ensuite la seconde étape qui est dépendente de la précédente et qui va rendre les données compatibles HTML & ISO 8859-1 : le traitement pour l'affichage.

Quelles fonctions sont prévues à cet effet, sachant que je souhaiterais de préférence convertir en entités uniquement les caractères invalides dans l'encodage choisi. J'ai vu qu'il existe des fonctions de type mb_xxx() mais je n'ai pas très bien compris le fonctionnement.

Merci d'avance d'éclairer ma lanterne sur ces points encore un peu obscurs pour moi.
Modifié par 84mickael (22 Aug 2005 - 21:23)
Je viens apporter une petite précision sur MySQL, je viens de voir qu'à un charset (ici ISO-8859-1) il existe plusieurs jeux de caractères possibles. Voici ceux susceptibles de nous intéresser, français :
a écrit :
latin1_bin : Europe de l'ouest (multilingue), Binaire
latin1_general_ci : Europe de l'ouest (multilingue), insensible à la casse
latin1_general_cs : Europe de l'ouest (multilingue), sensible à la casse
Quant à l'UTF-8 :
a écrit :
utf8_bin : Unicode (multilingue), Binaire
utf8_general_ci : Unicode (multilingue), insensible à la casse
utf8_roman_ci : Europe de l'ouest, insensible à la casse
utf8_unicode_ci : Unicode (multilingue), insensible à la casse

Modifié par 84mickael (23 Aug 2005 - 00:25)
Suite au sujet Encodage, caractères invalides et entités HTML, si j'ai compris les informations qu'on m'a donné, il me faudrait :

* une fonction convertissant uniquement les caractères invalides ISO-8859-1 en entités HTML (ou référence numérique)

(si une telle fonction n'existe pas, je peux la faire mais j'aimerais être sûr de disposer d'une liste exhaustive de caractères invalides)

* une fonction convertissant une chaîne (préalablement saisie par un utilisateur) en ISO-8859-1

* si possible, la même mais pour l'UTF-8

Si je continue sur mon idée d'utiliser l'ISO 8859-1, il me faudra logiquement transformer les caractères invalides puis convertir la chaîne dans le bon charset.

Par contre si je change d'avis pour UTF-8, j'aurai juste à convertir la chaîne en UTF-8.

En espérant que quelqu'un pourra me renseigner sur le sujet. Je pense que je commence à cerner un petit peu le problème !