Forum Clubic

Preg_match et accents

bonjour, j’aimerais savoir s’il est possible de laissé passé les caracteres accentué dans preg_match.

fonction alphanumerique ( je l’utilise pour les noms et prénoms pour ne pas avoir toute sorte d’envoie bizarre )

ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ

	function alpha_numeric($str)
{
	return ( ! preg_match("/^([-a-z0-9])+$/i", $str)) ? FALSE : TRUE;
}

merci a l’avance je galere…

return ( ! preg_match("/^([-a-z0-9ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ])+$/i", $str)) ? FALSE : TRUE;

après il faut aussi que l’encodage de la page permette tout ces caractères.
Edité le 01/01/2009 à 19:52

ne fonctionne pas…

	function alpha_numeric($str)
{

	return ( ! preg_match("/^([-a-z0-9ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ])+$/i", $str)) ? FALSE : TRUE;
}

je lutilise de cette facon… et ma page est encoder en UTF-8

$nom = htmlentities(substr($_POST[‘field1’],0,100), ENT_QUOTES,“UTF-8”);

if (alpha_numeric($nom)==FALSE)
{
	$errors[] = 'NON';
}

… autre idée pt… :frowning: merci

salut,

je ne suis pas un pro des regexp, mais tu déclare des maj et min (ÀÁÂ…àáâ…) alors que tu met l’option i… ça peut pas faire bugguer?

non a prioris c’est pas ca.
J’ai du y réfléchir quelques minutes.
Je sais pas comment preg_match fonctionne exactement.
Mais a mon avis, il prend le code du caractère a par exemple, et cherche dans la chaine s’il trouve le meme code (donc le meme caractère).

Mais tu utilises htmlentities !!!

En UTF-8, å a un certain code disons 2550 (c’est pas le bon ^^)
Lorsque tu applique la fonction htmlentities : å est transformé en : å (il faut donc coder le &, a, r, i, n, g et ; en UTF-8).
Donc la regex va chercher le code 2550 dans la chaine, mais il ne le trouvera pas (si mon raisonement est correct !), car å n’est plus dans la chaine !

Il y a donc différentes solutions : tu codes en UTF-8, vérifies les regex et ensuite seulement htmlentities, ou alors tu autorises & et ; dans la regex (mais bon alors tu controles plus grand chose … ).

Puis je te conseille aussi de vérifier la longueur des chaines, ainsi qu’une fonction qui vérifie qu’on tappe que des caractères (le nom ‘0’ passerait le test de ta regex … ).

alors auriez-vous une fonction pour moi, n’importe quel facon, pour que j’aille un filter sur mon input NOM,
dans le genre alphanumerique + accent. et - (tiret) espace la… dans le fond un bon filtre pour le Prenom et nom…

merci… :slight_smile:

bon, j’ai trouvé une solution, mais pour vous dire j’utilisais htmlentities pour empecher l’affichage de code malveilleux.

donc faudrait voir si je laisse pas justement place au piratage la…

voila le code:

function alpha_numeric($str)
{

return ( ! preg_match("/^([-a-z0-9ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ])+$/i", $str)) ? FALSE : TRUE;
}

je lutilise de cette facon… et ma page est encoder en UTF-8

//POUR GARDER LES ACCENTS SUR L’AFFICHAGE
$nom = htmlentities(substr($_POST[‘field1’],0,100), ENT_QUOTES,“UTF-8”);

//ET JE FAIS MON TEXT SUR LA VARRIABLE POST AU LIEU DE CELLE FILTRER PAR HTMLENTITIES
if (alpha_numeric($_POST[‘field1’])==FALSE)
{
$errors[] = ‘NON’;
}

de cette facon tout fonctionne.
donc votre avis côté sécurité… ?

ce n’est pas moins sécurisé qu’avant!
la manipulation des données n’est pas le problème. c’est l’enregistrement et l’affichage qui sont problématiques.
D’ailleurs tu parles d’affichage, mais pense à bien filtrer avant enregistrement aussi! la première fois que je me suis intéressé à la sécurité des sites, j’ai essayé un peu d’injection sql sur un site que je venais de faire, et j’ai réussi à bousiller la moitié ma base! lol

ke me conseil tu alors ???..

je ne connais pas ton script, donc je ne peux pas te conseiller (je ne m’y connais de toute façon pas très bien niveau sécurité, je connais jute la base).
Je disais juste que si tu enregistre ces données, penses bien à filtrer avant l’enreg (htmlentities c’est dja pas mal) et pas uniquement avant affichage.

oki… je vais donc voir a sa :)… mais deja htmlentities enleve les quotes, sa aide deja a empecher les sql injection :stuck_out_tongue:
. je suis aller sur youtube y voir des exploit de sa loll