Supprimer des caractères spéciaux d'une chaine

Supprimer des caractères spéciaux d'une chaine - PHP - Programmation

Marsh Posté le 20-07-2006 à 19:04:15    

Petit probleme: j'ai une variable $mot qui peux prendre du texte entré par l'utilisateur donc non prévisible à l'avance. Si on tappe le texte "c'est", alors, à cause de l'apostrophe j'ai un probleme parce que:
 
echo $mot donne c\'est
echo '$mot' donne $mot
echo "$mot" donne c\'est
 
mais dans aucun cas j'obtiens c'est ! Comment faut il faire ??


Message édité par cimourdain le 23-07-2006 à 12:00:56
Reply

Marsh Posté le 20-07-2006 à 19:04:15   

Reply

Marsh Posté le 20-07-2006 à 21:12:33    

Reply

Marsh Posté le 20-07-2006 à 23:28:08    

oui j'ai trouvé juste apres avoir posté mais en fait je me suis rendu compte que j'avais un autre probleme, car ma chaine sert a faire des nom de fichier et si on met des caractere comme /, \, :, ?, <, > etc... ca pose des probleme donc en fait si ca existe pas deja faudrait que je fasse une fonction qui supprime ou remplace ces caracteres si ils sont présents dans le texte. Vous avez des idées ?

Reply

Marsh Posté le 20-07-2006 à 23:34:48    

salut! il faut utiliser un backslash \ avant chaque caractère spécial du type guillemet,etc.

Reply

Marsh Posté le 20-07-2006 à 23:36:18    

oui mais le probleme c'est qu'on ne sait pas a l'avance ce que l'utilisateur va entrer !
Je suis toujours a la recherche d'un fonction succeptible de suppirmer les caractères interdits pas Windows pour les noms de fichiers !

Reply

Marsh Posté le 21-07-2006 à 09:47:48    

str_replace (la_liste_des_caractère_interdit , rien , chaine de l'utilisateur)

Reply

Marsh Posté le 21-07-2006 à 12:16:11    

ok merci je vais essayer


Message édité par cimourdain le 21-07-2006 à 12:21:47
Reply

Marsh Posté le 21-07-2006 à 13:34:15    

ca marche pas, j'ai écrit ca:
 
$interdit=array("\", "/",  ":", "*", "?", """, "|" );
 
et j'obtiens pour cette ligne l'erreur suivente:
 
Parse error: syntax error, unexpected ':', expecting ')' in ...
 
EDIT: en fait si ca marche si on enleve le caractere \ de la liste ce qui n'est pas genant car on peut l'enlever avec la fonction stripslashes, par contre ca marche pas avec les caractères < et > ils restent alors que les autres: *, :, |, *; ? disparaissent bien et sont remplacé par ce que j'ai choisit dans la fonction str_replace et j'ai aussi un probleme avec le caractere ".
 
la variable est: $interdit=array(">", "<",  ":", "*", "/", "|", "?" );
 
 
en fait non stripslashes ca enleve meme pas les \ ! :(
 
Voici mon code:
 

Code :
  1. <?php
  2. $phrase = htmlentities($_POST['autre'], ENT_QUOTES);
  3. echo $phrase;
  4. echo "<br/>";
  5. echo stripslashes($phrase);
  6. echo "<br/>";
  7. $interdit=array(">", "<",  ":", "*", "/", "|", "?", '"', '<', '>');
  8. $phrase = str_replace($interdit, "_", $phrase);
  9. echo $phrase;
  10. ?>


 
et mes résultats:
 
tes<t
tes<t
tes<t
en entrant tes<t
 
tes\\t
tes\t
tes\\t
en entrant tes\t
 
tes\"t
tes"t
tes\"t
en entrant tes"t


Message édité par cimourdain le 21-07-2006 à 14:01:48
Reply

Marsh Posté le 22-07-2006 à 01:01:52    

Salut! j'ai tester ton code et il manquait juste un backslash devant \ et ".
J'ai testé egalement avec une variable d'url et cela fonctionne nickel.

Code :
  1. <?php
  2. $phrase = "test><\ ";
  3. echo $phrase;
  4. echo "<br/>";
  5. $interdit=array(">", "<",  ":", "*","\\", "/", "|", "?", "\"" );
  6. $phrase = str_replace($interdit, "_", $phrase);
  7. echo $phrase;
  8. ?>


 
résultat obtenu avec $phrase -> test___  
 
Voila, j'espère que ca t'aidra...


Message édité par oggo le 22-07-2006 à 01:10:48
Reply

Marsh Posté le 22-07-2006 à 17:36:40    

le probleme c'estr quand il y a plusieurs \ à la suite ! comment faire ?
 
EDIT: en fait ton code marche plus ou bien, regarde ce que j'obtiens:
 

Code :
  1. <?php
  2. $phrase = htmlentities($_POST['autre'], ENT_QUOTES);
  3. echo $phrase;
  4. echo "<br/>";
  5. echo "<br/>";
  6. $interdit=array(">", "<",  ":", "*","\\", "/", "|", "?", "\"" );
  7. $phrase = str_replace($interdit, "_", $phrase);
  8. echo $phrase;
  9. ?>


 
dans le formulaire html je tappe: de<op>y|op/pm\\\yh*aa:m
et j'obtiens:
de<op>y|op/pm\\\\\\yh*aa:m
de<op>y_op_pm______yh_aa_m
 
Premier probleme, les \ sont automatiquement doublés dès le départ, même si part la suite ils sont tous correctement remplacés, cela pose quand meme un probleme.
Deuxième problème, on arrive toujours pas a supprimer les caractères < et >
 
Pour info le code html est:
 

Code :
  1. <form method="post" action="test.php">
  2. <p>
  3. <label>Entrez texte :
  4.  <input type="text" name="autre" />
  5. </label>
  6. </p>
  7. <p>
  8.        <input type="submit" value="traitement" />
  9. </p>
  10. </form>


Message édité par cimourdain le 22-07-2006 à 17:52:35
Reply

Marsh Posté le 22-07-2006 à 17:36:40   

Reply

Marsh Posté le 23-07-2006 à 21:25:23    

Alors j'ai testé avec tes valeurs et je n'ai pas de dédoublement des \. Peut être as tu utilisé addslashes ou stripslashes. Sinon pr les < > ils peuvent être remplacés par cette méthode mais ds ton exemple, <op> est interprété comme une balise html et le htmlentities la supprime. voila ;)

Reply

Marsh Posté le 23-07-2006 à 22:27:23    

non je n'utilise ni addslashes ni stripslashes, c'est grave si j'utilise pas de htmlentities ?

Reply

Marsh Posté le 23-07-2006 à 23:04:28    

c est pas un coup de magic quotes ?

Reply

Marsh Posté le 23-07-2006 à 23:24:32    

je sais pas trop ce que c'est mais je n'utilise pas cette fonction tout mon code est dans ce topic !

Reply

Marsh Posté le 23-07-2006 à 23:29:59    

non  oggo si c'était ce que tu dis, supprimer a cause de htmlentities ca disparaitrait, or regarde bien ce que j'obtiens !
de<op>y_op_pm______yh_aa_m

Reply

Marsh Posté le 23-07-2006 à 23:33:29    

magic_quotes est une option definie par ton hebergeur ca fait une sorte d addslashes automatique
 
normalement en ecrivant ceci  
php_flag magic_quotes_gpc off
dans un htaccess ca devrait marcher mais je ne te le conseille pas trop si tu debutes

Reply

Marsh Posté le 23-07-2006 à 23:58:15    

oui non je pense qu'on peut résoudre mon probleme sans ce genre de chose !!

Reply

Marsh Posté le 24-07-2006 à 09:36:45    

Je pense que pr les \ il est question d'un parametre de serveur car sous easy php aucun pb.

Reply

Marsh Posté le 24-07-2006 à 10:13:36    

il y a une fonction en php qui échappe déjà les caractéres spéciaux.. à savoir
addslashes()
 
et tu désactive le magic quote sur ton serveur php.. et vla ;)
 
ensuite quand tu li ta chaîne tu enléve les / avec la fonction énoncé quelques réponses plus haut ;)

Reply

Marsh Posté le 24-07-2006 à 12:46:13    

j'ai pas de pouvoir sur le serveur c'est le serveur de mon FAI, ou alors je sais pas comment faire. Et pour l'hstoire des / je vois pas ce que tu veux dire.

Reply

Marsh Posté le 24-07-2006 à 12:53:59    

Toutes les pistes à suivre ont déjà été données...  
 
tu crées une fonction qui échappe (grace au /) des caractéres... alors que addslashes() existe en natif dans le php.... ?
 
tu dis que tu veux enlever ces mêmes caractéres d'échappement... et bien utilise Stripslashes(), fonction qui t'a été donnée un peu plus haut.
 
mIRROR t'as indiqué comment invalider le magic quotes, fonction qui échappe d'elle même les caractéres spéciaux.
 
 
Note : si tu veux des infos sur les fonctions php reporte toi aux docs php... par exemple sur le site de nexen

Reply

Marsh Posté le 07-08-2006 à 23:10:53    

Bon, Pour le backslash :
 
$texte = str_replace("\\", "", $texte);
 
le reste suis la meme logique ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed