empêcher saisie caractères accentués en PHP

empêcher saisie caractères accentués en PHP - PHP - Programmation

Marsh Posté le 25-11-2009 à 18:46:01    

Bonjour,
 
J'ai un formulaire avec un champ pseudo et je souhaiterai empêcher l'utilisateur de s'inscrire avec un pseudo ayant des caractères accentués tels que é è à ù .
Je n'ai pas trouvé de fonction php qui contrôlerait que les caractères sont sans accent, ou le cas échéant qui convertirait les caractères accentués en caractères sans accent.
Est-ce qu'une de ces deux fonctions existe, ou dois-je utiliser une expression régulière pour convertir les caractères accentués entrés par l'utilisateur?
 
Merci pour vos réponses.

Message cité 1 fois
Message édité par fab1105 le 25-11-2009 à 18:49:17
Reply

Marsh Posté le 25-11-2009 à 18:46:01   

Reply

Marsh Posté le 25-11-2009 à 19:07:04    

les 2, controle avec javascript coté client + control php coté server,  
apres un expression regulaire fera l'affaire,  tu peu l'utilisé autant en javascript qu'en php

Reply

Marsh Posté le 25-11-2009 à 21:37:50    

si ce n'est que le javascript est facilement contournable. Mais ceci dit, ça *peut* éliminer qq tentatives ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 25-11-2009 à 21:54:10    

fab1105 a écrit :

Bonjour,
J'ai un formulaire avec un champ pseudo ............
Merci pour vos réponses.


Oui le plus simple est de controler a la reception la nature du POST !
 
Par exemple

Code :
  1. <?php
  2. if (isset($_POST["nom"])) $nom=htmlentities(trim($_POST["nom"]));
  3.     else $nom="";
  4. function pasaccent($nom){
  5.     if (preg_match("#[a-z0-9]#", $nom)){ return TRUE; }
  6.       elsereturn FALSE;  }
  7. }
  8. if(pasaccent($nom) && $nom!="" ){    $oui="oui";}
  9.    else{ $oui="";}
  10. ?>

Message cité 1 fois
Message édité par FoxLeRenard le 25-11-2009 à 21:56:53
Reply

Marsh Posté le 25-11-2009 à 23:33:37    

NewsletTux a écrit :

si ce n'est que le javascript est facilement contournable. Mais ceci dit, ça *peut* éliminer qq tentatives ...


 
c'est pour ca que je dis "les 2" un controle client parce que c'est plus joli pour l'utilisateur, et un control serveur qui va bien faire tout ca  ;)

Reply

Marsh Posté le 26-11-2009 à 07:52:23    

FoxLeRenard a écrit :


Oui le plus simple est de controler a la reception la nature du POST !
 
Par exemple

Code :
  1. <?php
  2. if (isset($_POST["nom"])) $nom=htmlentities(trim($_POST["nom"]));



 
htmlentities à cet endroit c'est stupide.[:moule_bite]
Cette fonction sert à s'assurer que l'affichage de ta variable sera correct quand tu l'intègres dans du code html, pas à la modifier. Là comme t'es parti du vas stocker du contenu incorrect dans la base de données.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-11-2009 à 08:28:02    

skeye a écrit :


 
htmlentities à cet endroit c'est stupide.[:moule_bite]
Cette fonction sert à s'assurer que l'affichage de ta variable sera correct quand tu l'intègres dans du code html, pas à la modifier. Là comme t'es parti du vas stocker du contenu incorrect dans la base de données.


Merci de ne pas répondre en portant un jugement sur ceux qui comme toi aident au mieux  :non:  
Si bien sur puisqu'il sagit d'un pseudo et donc on bloque toute tentative de hack donc on flingue les balises, ensuite on controlera qu'il n'y a que de l'aphanum.
genre sans accent par exemple

Message cité 1 fois
Message édité par FoxLeRenard le 26-11-2009 à 08:29:34
Reply

Marsh Posté le 26-11-2009 à 09:27:38    

FoxLeRenard a écrit :


Merci de ne pas répondre en portant un jugement sur ceux qui comme toi aident au mieux  :non:

 

Pour aider les gens il faut être sûr de ce qu'on leur dit. En l'occurrence ce n'est pas le cas, ton htmlentities n'a rien à faire ici.

 
FoxLeRenard a écrit :


Si bien sur puisqu'il sagit d'un pseudo et donc on bloque toute tentative de hack donc on flingue les balises

 

Non, non et non. Si ton utilisateur veut s'appeler <body>TOTO</body> c'est ce que tu dois stocker dans la base (si c'est autorisé, évidemment...).
Stocker des données passées par htmlentities introduit un couplage fort entre le médium utilisé pour la présentation des données et les données elles-mêmes, ce qui n'a aucun intérêt et peut même s'avérer gênant pour des choses telles que les recherches dans les données ou tout simplement l'utilisation d'un autre medium qu'une interface web.
C'est une mauvaise pratique, et donner ce genre de mauvais exemple n'aide personne.

Message cité 1 fois
Message édité par skeye le 26-11-2009 à 09:27:54

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-11-2009 à 09:30:25    

Et si tu vérifies les accents après un htmlentities, tu risques pas d'en trouver des masses...

Reply

Marsh Posté le 26-11-2009 à 09:44:01    

soulmanto a écrit :

Et si tu vérifies les accents après un htmlentities, tu risques pas d'en trouver des masses...


Non, et en se démerdant suffisamment mal on peut même se retrouver à virer les caractères non alphanumériques et donc ajouter des caractères qui n'ont rien à voir à la place des entités html.[:petrus75]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 26-11-2009 à 09:44:01   

Reply

Marsh Posté le 26-11-2009 à 13:03:25    

Personnellement j'utilise ceci pour remplacer les caractères accentués par leur version non accentuée, ça pourra peut-être te servir :

Code :
  1. if (function_exists('iconv'))
  2. {
  3.  $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
  4. }


Ce n'est peut-être pas la meilleure méthode cela dit, et cela nécessite d'avoir l'extension iconv activée.


Message édité par Tirkyth le 26-11-2009 à 13:03:39
Reply

Marsh Posté le 26-11-2009 à 13:38:18    

humm

 
Code :
  1. $text = 'ééééééééàààààààèèèèèèèè';
  2. $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
  3.     
  4. echo $text;
 

'e'e'e'e'e'e'e'e`a`a`a`a`a`a`a`e`e`e`e`e`e`e`e

 

couplé a

Code :
  1. echo preg_replace('/[\W]/', '', $text);
 

c'est pas trop mal bon faudrait rajouter les autres caractère


Message édité par stealth35 le 26-11-2009 à 13:47:04
Reply

Marsh Posté le 07-12-2009 à 13:58:20    

skeye a écrit :


 
Pour aider les gens il faut être sûr de ce qu'on leur dit. En l'occurrence ce n'est pas le cas, ton htmlentities n'a rien à faire ici.
 


 
Je ne crois pas non. A la limite, la personne peut commencer sa phrase avec : Il me semble que...
 
Parce que tu verrais le nombre de conneries que je lis ne serait-ce que sur HFr, par des gens kissyconnaissent et sûrs d'eux...
Les forums ne seraient pas très remplis si on acceptait que les réponses de ceux qui 'savent vraiment'.
Mais au moins il y a des personnes (comme toi) qui sont là pour rectifier (après le côté hautain n'est pas obligatoire non plus), c'est comme ça qu'on avance.

Reply

Marsh Posté le 07-12-2009 à 14:23:47    

blueteen a écrit :

Je ne crois pas non.


Si. En mêlant des âneries à des bribes de réponses on n'aide personne.


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed