Bonjour à tous,
Voilà je suis confronté à un problème d'encodage des caractères..
Je développe un site qui fait ceci (grossièrement) :
- le visiteur rentre un mot dans un formulaire (genre commentaire), je le ré affiche sur la page pour qu'il vérifie que c'est bon (prévisualisation),
- je stocke ensuite cet input en bdd, et il pourra être ressorti (affiché sur une page) à un moment donné.
Par exemple, un visiteur rentre "toto", envoie le formulaire, j'affiche "vous avez entré 'toto'".
Je stocke "toto" en base de données. Et ensuite une autre page affichera les 50 derniers mots entrés, donc "toto" apparaitra.
Si on prend des caractère alpha-numériques pas de problème.
Par sécurité j'ai utilisé la fonction htmlentities() afin d'éviter le xss (balise script etc).
Mon problème survient quand un utilisateur rentre un caractère exotique, comme par exemple le caractère "▶" (code html : & #9654; qui est un triangle).
Mais comme j'utilise htmlentities() mon triangle devient le code html associé (& #9654;), or moi je veux qu'il affiche le triangle, je dois donc enlever mon htmlentities() : c'est la seule solution ?
Ensuite, enregistrement en bdd de ce triangle. Manque de bol encore une fois ce qu'il enregistre en bdd c'est le code html du triangle et non le triangle en lui même.. Quand je vais ensuite récupérer l'enregistrement pour l'afficher, je récupère le code html (logique), je l'affiche et pour qu'il redevienne triangle il faut encore une fois que je n'utilise pas htmlentities() => problème de sécurité..
Par contre, si je rentre à la main (c.a.d. dans le formulaire de phpmyadmin) mon triangle, il l'enregistre bien en tant que triangle, mais quand je le récupère en php ensuite et que je l'affiche, j'ai un "?" à la place de mon triangle..
Bref, je suis perdu, je ne sais pas comment gérer ces caractère exotiques, car si je dois enlever les htmlentities() pour que ces caractères s'affichent bien, j'ai un problème de sécurité, mais si j'utilise htmlentities(), tous mes caractères exotique ne seront que des codes html..
En espérant avoir été clair,
Merci de vos conseils.