Bonjour j'ai un problème d'encodage UTF-8. Il n'est ni au niveau de mon formulaire HTML ni au niveau de mon traitement PHP ni au niveau de ma BDD, le problème c'est que, quand je demande à afficher un chaîne de caractère contenant des accents à PHP, tout va bien, mais quand je demande le caractère en particulier par exemple : echo $nom[2];, pour "ELÉ" par exemple, le navigateur me retourne �.
Ça me pose pas mal de soucis, j'ai essayé utf8_encode(), mais ça ne marche pas. Pourtant j'ai bien défini :
-Pour le HTML : <meta http-equiv="Content-Type" content="text/html ; charset=UTF-8" />
et : PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" au niveau de ma commande de connection SQL.
Je ne vois vraiment pas d'où vient le problème.
J'ai essayé alors de faire utf8_decode() au début puis utf8_encode() à la fin du traitement. Mais problème, les caractères accentués se transforment en �.
Je vous remercie d'avance.
ta balise html est cassée
ah oui non j'en ai juste sauté un bout
un petit snippet peut-être? j'ai l'impression que c'est ton "SET NAMES utf8" qui est ignoré
Alors je m'explique, le prof veut qu'on crée un formulaire qui envoie une chaîne de caractère pour être ensuite traitée par PHP, le problème est qu'il veut absolument qu'on ne puisse rentrer que des lettres, des accents, pas de chiffres, de $ et autres %. La difficulté c'est qu'il demande comme personne ne sait faire de javascript, de se débrouiller avec HTML, PHP et SQL. J'avais donc dans l'idée d'enregistrer dans une table sous phpmyadmin une table avec les caractères autorisés pour qu'ensuite, quand l'utilisateur envoie la chaîne de caractère, cette dernière soit traitée caractère par caractère et comparée avec une requête SQL avec chaque caractère de la table des caractères autorisées. J'ai mis en place un compteur '$i' qui initialement a la valeur de la chaîne de caractère puis si chaque caractère est dans la table, ce dernier tombe à 0 alors le traitement s'effectue, sinon ça veut dire qu'un caractère n'est pas autorisé et alors je fixe '$_POST['nom'] à 0, ainsi on ne rentrera pas dans la boucle de traitement et on sera renvoyé directement au formulaire initial.
Le code marche nickel et ne retourne pas d'erreur.
Oula, tu fais compliqué.
Une expression régulière en [a-zA-Z] semble suffire largement à ton besoin.
J'ai finalement réussi en passant par htmlentities() puis en créant une fonction hyper lourde mais qui marche et qui me permet d'éliminer tous les caractères spéciaux sauf les accents et le tiret.
Lourde ? Mon expression régulière qui fait un filtrage similaire n'est pas plus compliquée que ça :
IS_HARMLESS_TEXT = '[a-zA-Z0-9_ \u00C0-\u017F.!:?/*+\'\"\n\r!:;,()-]*';
Moi aussi je commence à programmer, mais je ne comprends pas très bien la fonction postée par vdd.
Est un caractère 'sans danger' tout caractère répété autant de fois que souhaité ou pas (*) ce qui est entre les crochets []. Le - entre deux caractères indique un intervalle, par exemple A-Z toutes les majuscules. Les \uXXXX capturent les accents, etc