OVH Cloud OVH Cloud

controller un champs de formulaire et mail()

3 réponses
Avatar
Phil P.
Bonjour,

J'aimerai contrôler des données provenant d'un formulaire qui se trouve sur
le net avant de les envoyer par une fonction mail(). En fait, j'aimerai
sécurisé ce champs.
Quels sont les fonctions PHP que je devrais regarder et surtout celles que
je devrais utiliser sur une variable du type $_POST['comment'] ?
Ce champs sert pour des commentaires, il n'est pas limite en longueur.
Les caractères autorisées seraient:
- les lettres de l'alphabet a-z A-Z
- les caractères français avec les accents, cédille...
- les chiffres 0-9
- @ ! % & () /*-+?;:.
- Les caractères utilisées dans les monnaies: $, Euros, Livre sterling,
etc....

Les autres caractères, je m'en fous car je ne sais lire que le français et
l'anglais. ;-)

Merci
PhilP

3 réponses

Avatar
Olivier Miakinen

J'aimerai contrôler des données provenant d'un formulaire qui se trouve sur
le net avant de les envoyer par une fonction mail(). En fait, j'aimerai
sécurisé ce champs.
Quels sont les fonctions PHP que je devrais regarder et surtout celles que
je devrais utiliser sur une variable du type $_POST['comment'] ?
Ce champs sert pour des commentaires, il n'est pas limite en longueur.


Voici une partie des fonctions à regarder : <http://fr2.php.net/pcre>.

Les caractères autorisées seraient:
- les lettres de l'alphabet a-z A-Z
- les caractères français avec les accents, cédille...
- les chiffres 0-9
- @ ! % & () /*-+?;:.
- Les caractères utilisées dans les monnaies: $, Euros, Livre sterling,
etc....


Tu fais bien de lister les caractères autorisés plutôt que de chercher à
prendre en compte les caractères interdits. C'est bien comme cela que tu
ne pourras pas risquer d'avoir des caractères dont tu ne veux pas.

Cela étant dit, puisque ta liste ne se limite pas à des caractères
us-ascii, tu dois en plus savoir si ce que tu récupères est en Latin1
ou en UTF-8 (ou autre chose encore, mais pour le français je ne vois pas
pourquoi tu irais chercher du Big5 ou du Shift-JIS), et adapter ton
expression rationnelle en fonction de cela. Si c'était du latin1, tu
ne pourrais pas avoir le symbole « ¤ » (ou alors sous forme d'entité
&#qqch;, ce qui risque d'entrer en conflit avec le fait d'accepter
aussi le caractère « & »). D'un certain côté c'est dommage car tester
des caractères en Latin1 peut se faire avec une simple expression du
style "[...ici les caractères...]". Mais en UTF-8 cela peut se faire
quand même.

Voici par exemple une expression qui prend en compte, en UTF-8, les
caractères que tu as indiqués *et qui sont dans us-ascii*, plus le
symbole euro. Pour les autres (caractères français accentués et
monnaies), je rajouterai l'info plus tard.

$ok = preg_match("|^([- @!%&()/*+?;:.0-9A-Za-z]|xE2x82xAC)*$|",
$string);

Attention : note que tu as oublié des caractères qui pourraient être
utiles, par exemple l'apostrophe ascii (') et la virgule (,).

Avatar
Olivier Miakinen
Le 08/04/2006 17:49, je répondais à Phil P. :

Voici par exemple une expression qui prend en compte, en UTF-8, les
caractères que tu as indiqués *et qui sont dans us-ascii*, plus le
symbole euro. Pour les autres (caractères français accentués et
monnaies), je rajouterai l'info plus tard.

$ok = preg_match("|^([- @!%&()/*+?;:.0-9A-Za-z]|xE2x82xAC)*$|",
$string);


Pour toute la partie haute de ISO-Latin1, rajouter ceci :
|xC2[xA0-xBF]|xC3[x80-xBF]

Attention : note que tu as oublié des caractères qui pourraient être
utiles, par exemple l'apostrophe ascii (') et la virgule (,).


Regarde ici, en particulier les onglets ISO-8859-1 et ISO-8859-15, pour
déterminer les caractères qui t'intéressent, sans en oublier :
http://www.miakinen.net/vrac/charsets/

Avatar
Phil P.
"Olivier Miakinen" <om+ wrote in message
news:e19i4d$1c0t$
Le 08/04/2006 17:49, je répondais à Phil P. :

Voici par exemple une expression qui prend en compte, en UTF-8, les
caractères que tu as indiqués *et qui sont dans us-ascii*, plus le
symbole euro. Pour les autres (caractères français accentués et
monnaies), je rajouterai l'info plus tard.

$ok = preg_match("|^([- @!%&()/*+?;:.0-9A-Za-z]|xE2x82xAC)*$|",
$string);


Pour toute la partie haute de ISO-Latin1, rajouter ceci :
|xC2[xA0-xBF]|xC3[x80-xBF]

Attention : note que tu as oublié des caractères qui pourraient être
utiles, par exemple l'apostrophe ascii (') et la virgule (,).


Regarde ici, en particulier les onglets ISO-8859-1 et ISO-8859-15, pour
déterminer les caractères qui t'intéressent, sans en oublier :
http://www.miakinen.net/vrac/charsets/


Merci Olivier. Desole je suis deborde. Je regarde ca un peu plus tard. Super
le lien.
Phil P.