8797 sujets

Développement web côté serveur, CMS

Bonjour,

j'ai un formulaire d'ajout de news, lors que je fais un ajout je passe par la fonction
$ch = htmlspecialchars($ch);

donc dans ma bdd les news sont stoquées avec les balises bbcode et les caractères spéciaux comme & sont en caractères html mais pas les accents (est-ce que je dois conservé les accents sous forme de caractère html ?
[taille=3][g]Salut ![/g][/taille]
- [g]Ils[/g] sont qualifiés. Les photos sont en N&B


Le problème c'est que lors de l'affichage ça marche sur Safair mais ça bug sur IE et FF, ça ajoute des ? et tronque le mot suivant, alors j'ai modifié ma fonction d'affichage


// Transforme les caractères spéciaux
$ch = htmlentities($ch);

// Saut de ligne
$ch = nl2br($ch);

// Remplace le bbcode
$ch=preg_replace($bbcode,$htmlcode,$ch);


Le problème est reglé pour les accents, mais je me retrouve avec & dans la page au lieu de &... Ou dois-je faire mes modifis? Lors du stoquage, affichage, ou les 2?
Salut Toxik, le mieux est de stocker brut de fonderie ton texte, et qu'a l'affichage tu applique les htmlspecialchars. En fait tu as un problème car d'un coté tu applique spécial chars, et de l'autre htmlentities, tu annule l'effet de l'un en faisant ca

(entité html, qui sont réencodées en entités html, donc affichage des entités html de ton spécialchars)
Salut,

tout dépend de qui nourrit ta base de données, si c'est toi et seulement toi, tu peux te contenter d'un addslashes à l'enregistrement, en revanche si tu as un formulaire public quel qu'il soit, forum ou autre, achtung, specialchars au minimum à l'insertion.

Donc, deux solutions, soit tu gères juste specialchars et tu fais en sorte que le jeux de caractères de ta page corresponde à ce qui sort de ta base (visiblement de l'utf-8 vu les ?) où tu fais carrément un htmlentities en entrée dans la base et un rien en sortie. (tu peux soit declarer ta page avec un jeux de caractères utf-8, soit les champs de ta base en latin 1 cs (1 ou 15 pour prendre l'euro).

Pour le moment, tu fais htmlspecialchars en entrée, tu stockes donc les esperluettes en & et quand tu refais un htmlentities en sortie tes & se transforment en & dans le source (jette un oeil pour voir) et donc affichent &, logique.

have swing
Merci à tous, oui alors le formulaire pour les news ça restreint mais le livre d'or est public, j'utilise les même fonctions.

Donc déjà je fais un addslashes() si magic_quotes n'est pas activé

Ma base en en latin cs, et mes pages en Iso-8859-1

Pour les insertions que dois-je faire en plus du addslashes ?

htmlspecialchars ou htmlentities, sachant que je stocke du bbode avec les crochets [g]balbla[/g]

le bbcode est traité à l'affichage.


Niveau sécurité addslashes c'est suffisant?
Modifié par ToxiK (16 Apr 2007 - 15:38)
Salut,
c'est suffisant, tant que tu ne réaffiches les données pas dans le formulaire en cas d'oubli d'un champ, parce qu'évidemment le réaffichage se fait sans le addslashes sinon, c'est assez vilain Smiley smile et que là si un petit drôle s'amuse à te coller du script dans un champ, ça peut faire chaud... mais bon, tu me diras, tant que c'est sur sa propre machine Smiley smile

Maintenant, perso, je dois dire qu'étant plutôt méfiant de nature, j'ai tendance à faire carrément striptags sur les champs de formulaire, sachant que ça empêche d'utiliser certains caractères comme < par exemple.
Maintenant, tu as aussi la possibilité d'utiliser une expression régulière qui vire les balises et laisse vivre les < et > dans une situation normale

Résultat des courses, addslashes (fais-le que magic quotes ou pas, tu ne sais pas comment l'hébergeur va évoluer et c'est une bonne habitude à prendre quoi qu'il arrive) et, normalement htmlspecialchars devrait suffire à l'affichage.
Tu es sûr qu'à aucun moment tu ne passes par autre chose que du latin et de l'iso, si c'est le cas, tu ne devrais pas avoir de ? à l'affichage. Tu peux utiliser l'iso-8859-15 qui te gèrera le caractère € aussi.

Voilou

have swing