begin process at 2012 05 24 23:05:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > INTERDIRE CERTAINS CARACTÈRES

INTERDIRE CERTAINS CARACTÈRES


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :13 247 / 229

Auteur : Arnauti

Ecrire un message privé
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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ENCODAGE UTF16 par foisse
GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU... par kylekatarnls
CONVERSION DES CARACTÈRES SPÉCIAUX DANS UNE BASE DE DONNÉES ... par crocblanc
FORMATAGE AUTOMATIQUE D'UN TEXT EN FONCTION DE MOTS CLÉES par _klesk

Commentaires et avis

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 +

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

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

Hello,

preg_match_all() aussi... ;-)

Commentaire de coucou747 le 10/02/2006 19:00:10 administrateur CS

preg_replace aussi...

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

Commentaire de coucou747 le 11/02/2006 09:11:34 administrateur CS

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

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

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°

Commentaire de Arnauti le 12/02/2006 20:56:29

Ha mince ^^.

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

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

Commentaire de TheSin le 13/02/2006 16:51:59

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

Commentaire de coucou747 le 13/02/2006 18:53:12 administrateur CS

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

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

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.

Commentaire de coucou747 le 14/02/2006 20:04:34 administrateur CS

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

même chose ?

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.

Commentaire de coucou747 le 14/02/2006 20:35:09 administrateur CS

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

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.

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 .

Commentaire de coucou747 le 15/02/2006 13:58:06 administrateur CS

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

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.

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.

Commentaire de Morricon le 12/06/2006 10:01:10

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

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

Commentaire de Palleas_44 le 12/06/2006 13:40:59

Largement

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°

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°

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.

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 ?

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.



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

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

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

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

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+

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 +

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.

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

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

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)

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

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°

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

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

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales