INTERDIRE CERTAINS CARACTÈRES

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 10 févr. 2006 à 01:55
sidouo Messages postés 15 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 31 mars 2010 - 9 août 2008 à 23:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35966-interdire-certains-caracteres

sidouo Messages postés 15 Date d'inscription mercredi 11 juin 2008 Statut Membre Dernière intervention 31 mars 2010
9 août 2008 à 23:43
salut tout le monde quelqu'un peux me dire l'interdiction
de plusieurs caracteres en utilisant la notion des expression reguliere.

ce que j'ai fais..
function verifpseudou($variable)
{
$syntaxe="#[a-zA-z0-9_.-]#";
return ((preg_match($syntaxe,$variable))?true:false);
}
mais ca va pas marche... lorsque je tape un?, <, > il les accept?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 janv. 2007 à 19:18
bah en même temps si tu fous les en-têtes dans le fichier je peux rien y faire mdr ... dans ce cas tous les scripts ont des failles XD

Enfin bon l'image ne s'affichera pas ;)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
2 janv. 2007 à 15:32
C'est pas vraiment que getimagesize() à une faille c'est que simuler une image n'est pas très dur... .. . ;o)

@ tchaOo°
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
29 déc. 2006 à 17:15
kankrelune > bah si getimagesize() a une faille en elle-même, j'y peux rien ;)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
29 déc. 2006 à 17:01
Effectivement comme en C la preincrementation est plus rapide que la postincrementation... et ce pour les même raisons... .. .

@ tchaOo°

ps : au fait Anthomicro... ton code d'upload sécurisé à une faille... getimagesize() est contournable... .. . ;o)
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
29 déc. 2006 à 09:25
zoukozouko => j'y penserais la prochaine fois ;-)
C'est vrai que je pense pas bcp à donner un peu de code en exemple, l'habitude de devoir apprendre seul .... désolé.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
29 déc. 2006 à 01:07
function mafonction($variable)
{
return ++$variable;
}

function mafonction2($variable)
{
return $variable++;
}

echo mafonction(1);
echo mafonction(1);
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
29 déc. 2006 à 00:11
ah parfait.
par contre, si je peux me permettre, c'est justement parce qu'elle sont différente que tu pourrais les comparer.
Si ca focntionne comme en C/C++, ce qui est probablemetn le cas, vu la ressemblance des des langages, alors tu devrais avoir de meilleurs résultats. Tu dois avoir des fichiers tout faits pour les tests, si tu peux tester ca, sans trop te casser la tete, ca pourrait etre utile, (a toi comme au autres).

Si par contre ca fonctionne differement, alors explique moi ca en PV, je suis curieux.

Voila, j'espere pas trop poluer la source avec mes questions.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 déc. 2006 à 19:00
Je n'ai pas reçu ton mail, en tout cas une chose est sûre, le $i++ et le ++$i sont deux choses bien différentes en PHP, donc c'est pour ça que je ne les compare pas ;)

a +
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
28 déc. 2006 à 18:17
lol
merci anthomicro.

"thesin" >> sympa pour le lien google.
Je finis mon master 2 info cette année.
Je te dis ça simplement parce que google est un ami que j'ai appris à uitiliser pour le moindre prétexte, et j'ai fait pas mal de recherche sans trouver de solution, et comme je sais que sur cs on a l'habitude de s'entraider (c'est d'ailleur le but de ce site)...
Bref, j'ai sûrement pas tout appris, mais enfin, au niveau des "éléments essetiels de la programmation", tu m'aurais été plus utile en écrivant directement quelques lignes. Merci quand meme.

"Antho" >> je suis allé sur ton site, je t'avais envoyé un mail pour te parler des bench que t'avais fait sur les ' et ", ou sur les boucles for.
Le mail était pas apssé en entier, jene sais pour quelle raison.
Mais tant que t'es la :
je t'avais juste proposé de tester tes boucles for avec la syntaxe for ($i=truc; $i<chouet; ++$i).
En C, le ++$i est plus 'rapide' que le $i++ car il économise deux copies dans la pile. En effet $i++ fait une copie de $i dans la pile, ajoute un, et recopie la valeur à l'adresse de ton $i. ++$i ajoute un directement.

J'ai pas testé en php, je sais pas comment on fait un benchmark.
En tout cas, si ca peut t'aider.
Merci en tout cas a+
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
26 déc. 2006 à 11:13
rooo, comment donner une solution sans laisser quelqu'un apprendre un élément essentiel de la programmation .... '^^
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
25 déc. 2006 à 23:58
"Moi j'aimerais juste dégager tous les caractères NON numériques d'une chaine : tout se qui n'est pas entre 0 et 9 en fait."

$caine = 'dqsfdsqdsfqdqsf04545e4z5r4ez5razeazrerezrezazreez99999999';

echo preg_replace('`[^0-9]*`','', $chaine);
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
25 déc. 2006 à 23:18
je te conseille carrément d'apprendre comment ça marche zoukozouko, donc je te conseille ce site par exemple :
http://www.expreg.com/pcre.php
Petite recherche google, et hop! plein de tutos ;-)
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
25 déc. 2006 à 21:46
"ca se torche avec une expression régulière"...

c'est quoi cette expression?

Moi j'aimerais juste dégager tous les caractères NON numériques d'une chaine : tout se qui n'est pas entre 0 et 9 en fait.

Quelqu'un a une soluc' rapide?
merci
Morricon Messages postés 41 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2007
12 juin 2006 à 19:12
Bha voilà ! Merci à tous pour vos remarques (instructives en plus) Je me disais bien qu'il existait un moyen de "faire simple" et propre en plus (Pour ne pas dire "crade")


Encore merci: Je corrige ça demain.
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
12 juin 2006 à 19:04
C'est clair, ca ne sert à rien de réinventer la roue ! Il y a des fonctions faites pour se simplifier la vie alors pourquoi ne pas les utiliser ?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 juin 2006 à 17:28
ça se torche avec une expression régulière, ça ne sert à rien de parcourir un tableau, ça prend plus de lignes de code et c'est surement plus lent et crade.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 juin 2006 à 13:55
non c'est le contraire...

if(caracteres_interdits($txt))
echo 'Il y a un caractère interdit dans le texte';
else
echo 'Le texte est ok';

LOo°oOl... .. .

@ tchaOo°
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 juin 2006 à 13:54
Pour Morricon

function caracteres_interdits($texte)
{
$carac_interdits = array(
'@', '\'', '/', '"',
'#', '{', '}', '[',
']', '|', '`', '^',
'¤' , ':' , '!'
);

for($i=0,$nbc=count($carac_interdits);$i<$nbc;$i++)
{
if(strpos($texte, $carac_interdits[$i]) === false)
return true;
}

return false;
}

ensuite tu n'a plus qu'a faire...

$montxt = 'coucou # pwet pwet';

if(!caracteres_interdits($txt))
echo 'Il y a un caractère interdit dans le texte';
else
echo 'Le texte est ok';

@ tchaOo°
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
12 juin 2006 à 13:40
Largement
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
12 juin 2006 à 13:19
t'aurais pû simplement définir ton tableau comme ça :
$carac_interdits = array( '@' , '\'' , '/' , '"' , '#' , '{' , '}' , '[' , ']' , '|' , '`' , '^' , '¤' , ':' , '!' );

Je trouve quand même ça plus simple ;-)
Morricon Messages postés 41 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2007
12 juin 2006 à 10:01
Oups !
Il faut retirer les exit dans la fonction. Sinon on a une erreur.
Morricon Messages postés 41 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 1 mars 2007
12 juin 2006 à 09:56
Bonjour à tous !

Je sais pas si j'ai bien compris cette fonction, mais bon comme elle m'indiquait certaines erreurs (???) de non déclarations: Je l'ai modifiée comme suit :
// Interdire certains caractères dans une saisie.
// RETOUR
// 0 si aucun des caracteres interdit est touvé
// 1 si au moins 1 des caracteres interdit est touvé
function caracteres_interdits($texte) { 

// Permet de rendre le script insensible à la casse. 
$message_temporaire = strtolower($texte); 	

// Tableau des caractères interdits
$carac_interdits = array();
$carac_interdits[1] = '@';		
$carac_interdits[2] = '\'';	
$carac_interdits[4] = '/';
$carac_interdits[5] = '"';		
$carac_interdits[6] = '#';
$carac_interdits[7] = '{';
$carac_interdits[8] = '}';
$carac_interdits[9] = '[';
$carac_interdits[10] = ']';		
$carac_interdits[11] = '|';
$carac_interdits[12] = '`';
$carac_interdits[13] = '^';
$carac_interdits[14] = '¤';
$carac_interdits[15] = ':';
$carac_interdits[16] = '!';

// Boucle de traitement
$traitement = 1 ;      
$erreur = 0 ;     
foreach($carac_interdits as $traitement) { 
//
// STRPOS renvoie TRUE si le caractère est trouvé
$position = strpos($message_temporaire, $traitement);  	
//
// Si la fonction renvoie VRAI c'est que le caractère est trouvé
// Retour: Erreur de caractère
if ($position !== FALSE) {  		   
$erreur = 1; 
return 1;
exit
}
} 
// Retour normal (Correct)
if($erreur == 0){ 
return 0; 
exit
    }     
} 


En fait elle renvoie 0 si aucun caractères interdits n'est trouvé (donc correct) et 1 si au moins l'un d'entre-eux est trouvé (donc erreur)

En fait je voudrai votre avis: Existe'til en PHP une méthode simple pour les caractères spéciaux car je ne trouve pas que le fait de déclarer tous les caractères soit bon. C'est à mon sens un gros risque d'oubli.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 févr. 2006 à 14:04
Coucou => je ne pige pas ce que tu veux dire ?
reprenons : strpos () renvoie effectovement un int s'il trouve, et un booléen FALSE (uniquement) s'il ne trouve pas.
Je soutenais Kankrelune quand il disait que le commentaire, sur la ligne du strpos (), était faux.
Et je répondais à TheSin que son commentaire était approximatif, tout en précisant que la façon dont il étrait utilisé dans CE code-ci était ok, puisque l'on procédait à une comparaison typée.
Bref, le test le plus judicieux à mon sens est :
if (false !== strpos ($truc, $machin)) {
// trouvé
}
parce qu'avec un get_type, ça devient plus compliqué à gérer.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
15 févr. 2006 à 13:58
malam, c'est le prototype de la fonction qu'il faut faire... sauf que là, c'est un mixed value, mais un mixed value particulier :
mixedValue strpos(string, string);
si la chaine contient la sous chaine alors :
int strpos (string, string);
si la chaine ne contient pas la sous chaine alors :
bool strpos (string, string);
Bon, à moins que je ne me trompes, on ne peut pas utiliser de mixed en C sans faire de pointeurs (notion totalement abscente en php, sauf pe pour les $$, mais c'est légèrement différent, et pas du tout traité pareil...)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 févr. 2006 à 07:50
Surtout que je voulais juste signifier que le commentaire de Krankelune, à la base, était justifié, moi...
Coucou => je ne vais pas faire des gettype sur tous les retours de toutes mes fonctions (même si tu as raison dans l'absolu). Je préfère le !== false .
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 févr. 2006 à 21:23
je n'ai pas les bases de C ^^

Bon pour résumer : strpos renvoit soit la position sous forme de int sois FALSE.

Bref pour tester si la chaîne est présente tu fais if(strpos(...)!==FALSE)
{
echo 'chaîne trouvée';
}

et hop. Y'a pas à discuter 107 ans sur cette fonction lol.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 févr. 2006 à 20:35
(les bases de C, ça sert :) )
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 févr. 2006 à 20:13
0 c'est un int c'est pas la même chose qu'un booléen en terme de typage scrict.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 févr. 2006 à 20:04
0 c'est false....
echo gettype(0), '/', gettype(false), '/', serialize(0), '/', serialize(false);

même chose ?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 févr. 2006 à 17:58
"0 c'est false"

0==FALSE
1==TRUE

0!==FALSE
1!==TRUE

;-) donc tout dépend comment tu fais tes vérifs.
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
14 févr. 2006 à 16:31
moi j'ai compris
strpos('a','abcdef') renvoie 0
0 c'est false
alors que dans le code de Arnauti, c'est genre
if (strpos('a','abcdef'))
et ca ca renverra false et fera donc pas ce qu'on veut ^^
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 févr. 2006 à 18:53
euh... malam, j'ai pas compris ton point de vue... peu importe ce que tu fais d'une fonction, elle renvoi toujours la même chose selon ses arguments... affiche gettype(strpos(...)); et tu verras soit int si les caractères sont présents, soit bool...
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
13 févr. 2006 à 16:51
ah oui, effectivement ....
tu as raison malalam ;)
merci de m'avoir corrigé :)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
13 févr. 2006 à 14:20
TheSine => c'est inexact, à défaut d'être complètement faux : true équivaut, sans comparaison de type, à une variable différente de 0, certes...donc, si j'ai la chaîne 'abcdef' et que je cherche 'a', avec ton raisonnement, mon strpos ne va pas me renvoyer true, mais false.
Sauf que dans ce cas, l'auteur teste bien sur le false AVEC comparaison sur le type, donc pas de problème.
Mais le commentaire était donc approprié :-)
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
13 févr. 2006 à 14:03
Faux... strpos renvoie la postion du charactère recherché s'il le trouve et false s'il ne le trouve pas... .. . ;o)

Mais comme true équivaut à une variable différente de 0 et false à 0, ca passe quand même :P
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
12 févr. 2006 à 20:56
Ha mince ^^.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
12 févr. 2006 à 16:15
*****************************************************
$position = strpos($message_temporaire, $traitement) ; // STRPOS renvoie TRUE si le caractère est trouvé

*****************************************************

Faux... strpos renvoie la postion du charactère recherché s'il le trouve et false s'il ne le trouve pas... .. . ;o)

@ tchaOo°
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
11 févr. 2006 à 09:14
Ben ouais si tu veux mais ce que je veux dire c'est que l'idée est bonne,le concept quoi rooooo un peu d'indulgence que diable ;)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
11 févr. 2006 à 09:11
arrète, c'est hyper mal programmé :
$carac_interdits n'est pas deffinit par : $carac_interdits=array();
on ne peut même pas rentrer les caractères par une chaine (ce qui rend chiant la frappe des caractères...)
et la fonction ne renvoi pas forcément quelquechose...
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
10 févr. 2006 à 19:28
La source est pô mal et c'est une bonne idée mais sachant que tu peux t'en tirer avec un expression régulière c'est du gaspillage de ressources, mais bon c'est po mal programmé quand même ;)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
10 févr. 2006 à 19:00
preg_replace aussi...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 févr. 2006 à 09:15
Hello,

preg_match_all() aussi... ;-)
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
10 févr. 2006 à 07:32
Je vais te répondre la même chose ^^, mon code permet d'afficher a l'utilisateur les carractères interdits qu'il utilises.
A++
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 févr. 2006 à 01:55
Salut,

Cf codes-php.net, mon commentaire est le même sur phpcs ;-)

une expression régulière en une ligne et hop c'est fait.

a +