Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INTERDIRE CERTAINS CARACTÈRES


Information sur la source

Catégorie :Chaîne de caratère Classé sous : interdire, caractères Niveau : Débutant Date de création : 09/02/2006 Vu / téléchargé: 9 649 / 209

Note :
4,4 / 10 - par 5 personnes
4,40 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (45)
Ajouter un commentaire et/ou une note

Description

Bonjour a tous,
Cette source permet d'interdire l'utilisation de certains caractère et d'afficher un message d'erreur avec le / les caractères interdits utilisés.
J'avais déjà posté une source preque identique (celle là est quand même mieux) qu'un Admin (a ma demande) a supprimée.
Celle ci est plus optimiser et sans doute plus propre.
 

Source

  • <?php
  • /* Code de index.php */
  • include('verif.php') ; ?>
  • <html>
  • <head>
  • </head>
  • <body>
  • <form action="index.php" method="post">
  • <div align="center">
  • <textarea name="message" cols="40" rows="7">
  • <?php
  • if(isset($_POST['message'])) echo $_POST['message'] ;
  • ?>
  • </textarea> <br />
  • <input type="submit" value="Envoyer"> </div>
  • </form>
  • <?php
  • if(isset($_POST['message'])) {
  • $resultat = caracteres_interdits() ;
  • echo $resultat ; // On affiche le message si il ne contient pas d'erreur
  • }
  • ?>
  • </body>
  • </html>
  • <?php
  • /* Code de verif.php */
  • function caracteres_interdits() {
  • $message_temporaire = strtolower($_POST['message']) ; // Permet de rendre le script insensible à la casse.
  • $carac_interdits[1] = '@' ; // 1 champ du tableau des caractères interdits
  • $carac_interdits[2] = '\'' ; // 2 champ du tableau des caractères interdits
  • $carac_interdits[3] = '"' ; // 3 champ du tableau des caractères interdits
  • $traitement = 1 ;
  • $erreur = 0 ;
  • foreach($carac_interdits as $traitement) {
  • $position = strpos($message_temporaire, $traitement) ; // STRPOS renvoie TRUE si le caractère est trouvé
  • if ($position !== FALSE) { // Si la fonction ne renvoie pas FALSE c'est que le caractère est trouvé
  • echo 'Erreur : Vous ne pouvez pas utiliser le caractère <strong>'.$traitement.'</strong> <br />' ;
  • $erreur = 1 ;
  • }} // Fin de la boucle
  • if($erreur == 0) {
  • return $_POST['message'] ;
  • }
  • } // Fin de la fonction
  • ?>
<?php 
/* Code de index.php */
include('verif.php') ; ?>
<html>
<head>
</head>
<body>
<form action="index.php" method="post">
<div align="center"> 
<textarea name="message" cols="40" rows="7">
<?php
if(isset($_POST['message'])) echo $_POST['message'] ;
?>
</textarea>	<br />
<input type="submit" value="Envoyer"> </div>
</form>
<?php 
if(isset($_POST['message'])) {
$resultat = caracteres_interdits() ;
echo $resultat ; // On affiche le message si il ne contient pas d'erreur
}
?> 
</body>
</html>		   


<?php 
/* Code de verif.php */ 
function caracteres_interdits() {
$message_temporaire = strtolower($_POST['message']) ; // Permet de rendre le script insensible à la casse.
$carac_interdits[1] = '@' ; // 1 champ du tableau des caractères interdits
$carac_interdits[2] = '\'' ; // 2 champ du tableau des caractères interdits
$carac_interdits[3] = '"' ; // 3 champ du tableau des caractères interdits
$traitement = 1 ;  	
$erreur = 0 ;	

foreach($carac_interdits as $traitement) {
$position = strpos($message_temporaire, $traitement) ; // STRPOS renvoie TRUE si le caractère est trouvé

if ($position !== FALSE) { // Si la fonction ne renvoie pas FALSE c'est que le caractère est trouvé
   echo 'Erreur : Vous ne pouvez pas utiliser le caractère <strong>'.$traitement.'</strong> <br />' ;
   $erreur = 1 ;
}} // Fin de la boucle	
	
if($erreur == 0) {
 return $_POST['message'] ;
	}	
} // Fin de la fonction	  
?>

Conclusion

Je penses que certaines choses peuvent être amélioré mais je ne sais pas comment donc j'attends vos idées et vos commentaires.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de Anthomicro le 10/02/2006 01:55:43

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 +

signaler à un administrateur
Commentaire de Arnauti le 10/02/2006 07:32:40

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++

signaler à un administrateur
Commentaire de malalam le 10/02/2006 09:15:27 administrateur CS

Hello,

preg_match_all() aussi... ;-)

signaler à un administrateur
Commentaire de coucou747 le 10/02/2006 19:00:10

preg_replace aussi...

signaler à un administrateur
Commentaire de Palleas_44 le 10/02/2006 19:28:56

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 ;)

signaler à un administrateur
Commentaire de coucou747 le 11/02/2006 09:11:34

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...

signaler à un administrateur
Commentaire de Palleas_44 le 11/02/2006 09:14:29

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 ;)

signaler à un administrateur
Commentaire de kankrelune le 12/02/2006 16:15:38

*****************************************************
$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°

signaler à un administrateur
Commentaire de Arnauti le 12/02/2006 20:56:29

Ha mince ^^.

signaler à un administrateur
Commentaire de TheSin le 13/02/2006 14:03:43

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

signaler à un administrateur
Commentaire de malalam le 13/02/2006 14:20:14 administrateur CS

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é :-)

signaler à un administrateur
Commentaire de TheSin le 13/02/2006 16:51:59

ah oui, effectivement ....
tu as raison malalam ;)
merci de m'avoir corrigé :)

signaler à un administrateur
Commentaire de coucou747 le 13/02/2006 18:53:12

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...

signaler à un administrateur
Commentaire de TheSin le 14/02/2006 16:31:20

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 ^^

signaler à un administrateur
Commentaire de Anthomicro le 14/02/2006 17:58:30

"0 c'est false"

0==FALSE
1==TRUE

0!==FALSE
1!==TRUE

;-) donc tout dépend comment tu fais tes vérifs.

signaler à un administrateur
Commentaire de coucou747 le 14/02/2006 20:04:34

0 c'est false....
echo gettype(0), '/', gettype(false), '/', serialize(0), '/', serialize(false);

même chose ?

signaler à un administrateur
Commentaire de Anthomicro le 14/02/2006 20:13:25

0 c'est un int c'est pas la même chose qu'un booléen en terme de typage scrict.

signaler à un administrateur
Commentaire de coucou747 le 14/02/2006 20:35:09

(les bases de C, ça sert :) )

signaler à un administrateur
Commentaire de Anthomicro le 14/02/2006 21:23:25

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.

signaler à un administrateur
Commentaire de malalam le 15/02/2006 07:50:35 administrateur CS

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 .

signaler à un administrateur
Commentaire de coucou747 le 15/02/2006 13:58:06

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...)

signaler à un administrateur
Commentaire de malalam le 15/02/2006 14:04:47 administrateur CS

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.

signaler à un administrateur
Commentaire de Morricon le 12/06/2006 09:56:18

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 :
[code]
// 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
    }    
}
[/code]

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.

signaler à un administrateur
Commentaire de Morricon le 12/06/2006 10:01:10

Oups !
Il faut retirer les exit dans la fonction. Sinon on a une erreur.

signaler à un administrateur
Commentaire de TheSin le 12/06/2006 13:19:16

t'aurais pû simplement définir ton tableau comme ça :
$carac_interdits = array( '@' , '\'' , '/' , '"' , '#' , '{' , '}' , '[' , ']' , '|' , '`' , '^' , '¤' , ':' , '!' );

Je trouve quand même ça plus simple ;-)

signaler à un administrateur
Commentaire de Palleas_44 le 12/06/2006 13:40:59

Largement

signaler à un administrateur
Commentaire de kankrelune le 12/06/2006 13:54:14

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°

signaler à un administrateur
Commentaire de kankrelune le 12/06/2006 13:55:28

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°

signaler à un administrateur
Commentaire de Anthomicro le 12/06/2006 17:28:52

ç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.

signaler à un administrateur
Commentaire de Palleas_44 le 12/06/2006 19:04:35

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 ?

signaler à un administrateur
Commentaire de Morricon le 12/06/2006 19:12:01


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.



signaler à un administrateur
Commentaire de zoukozouko le 25/12/2006 21:46:15

"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

signaler à un administrateur
Commentaire de TheSin le 25/12/2006 23:18:35

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 ;-)

signaler à un administrateur
Commentaire de Anthomicro le 25/12/2006 23:58:41

"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);

signaler à un administrateur
Commentaire de TheSin le 26/12/2006 11:13:48

rooo, comment donner une solution sans laisser quelqu'un apprendre un élément essentiel de la programmation .... '^^

signaler à un administrateur
Commentaire de zoukozouko le 28/12/2006 18:17:50

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+

signaler à un administrateur
Commentaire de Anthomicro le 28/12/2006 19:00:15

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 +

signaler à un administrateur
Commentaire de zoukozouko le 29/12/2006 00:11:18

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.

signaler à un administrateur
Commentaire de Anthomicro le 29/12/2006 01:07:30

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

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

echo mafonction(1);
echo mafonction(1);

signaler à un administrateur
Commentaire de TheSin le 29/12/2006 09:25:36

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é.

signaler à un administrateur
Commentaire de kankrelune le 29/12/2006 17:01:00

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)

signaler à un administrateur
Commentaire de Anthomicro le 29/12/2006 17:15:11

kankrelune > bah si getimagesize() a une faille en elle-même, j'y peux rien ;)

signaler à un administrateur
Commentaire de kankrelune le 02/01/2007 15:32:04

C'est pas vraiment que getimagesize() à une faille c'est que simuler une image n'est pas très dur... .. . ;o)

@ tchaOo°

signaler à un administrateur
Commentaire de Anthomicro le 02/01/2007 19:18:09

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 ;)

signaler à un administrateur
Commentaire de sidouo le 09/08/2008 23:43:44

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?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Limite de caractères?? [ par JosueClement ] Lorsque on utilise un formulaire en HTML, y a-t-il une limite d'envoi de caractères Merci d'avance...Josué Clémentjosue-clement@bluewin.ch menu et chaines de caractères [ par ayor ] bien le bonjour à tous, je voulais juste poser 2 petites questions : - tout d'abord, sous phpmyadmin, est-il possible de créer des champs de text nombre de caractères dans un enregistrement [ par desrimaisd ] bonjour a tous,je voudrais avoir un petit renseignement, c'est tout bete je pense mais je sais pas du tout:combien de caractères peut on insérer dans Interdire enregistrer sous [ par must ] Salut,y'a t-il un script qui puisse interdire à k'utilisateur de faire 3enregistrer sous",d'enregistrer la page en cours qu'il visualiseSi vous avez u extraire chaîne caractères [ par eax ] salutj'ai un petit pb de traitement de chaines de caractères :j'ai une variable avec du contenu dedans (je ne sais pas ce qu'il y a exactement dedans Regex et caractères spéciaux [ par Totofweb ] BonjourJ'ai une variable, $texte. Dans celle-ci, je dois tester si elle contient [couleur=#123456] où 123465 est un nombre entier de 6 chiffres.J'ai e Conversion de caractères issus de dbase.comment faire? [ par asterixobelix ] &lt;?php$base="eleves.dbf";$dbh =dbase_open($base,0);$nb_eleves=dbase_numrecords($dbh);print("$nb_eleves &lt;BR&gt;");$nb_champs=dbase_numfields($dbh) Comment rechercher un mot dans une chaine de caractères ? [ par Drazounet ] Bonjours à tous,Je suis en train de programmer un forum en php et maintenant je suis en train de lui ajouter une section "recherche" afin de trouver p combien de caractères il y a dans un longtext [ par perig ] BonjoursBon voilà ma question du jour et la suivante :Savez vous combien de caractères il y a dans un longtext pour une base mysql.merci---Perig---Po Découpage de chaine de caractères [ par DJDX ] Mon problème, est le suivant... Dans ma base de donnée MySQL, j'ai des liens sous le format http://www.blabla.com*blab1/bla2. J'aimerais savoir commen


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 7,909 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.