Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2886 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1410564
cimourdain
Posté le 20-07-2006 à 19:04:15  profilanswer
 

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
mood
Publicité
Posté le 20-07-2006 à 19:04:15  profilanswer
 

n°1410640
sielfried
Posté le 20-07-2006 à 21:12:33  profilanswer
 
n°1410711
cimourdain
Posté le 20-07-2006 à 23:28:08  profilanswer
 

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 ?

n°1410713
oggo
no woman no cry
Posté le 20-07-2006 à 23:34:48  profilanswer
 

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

n°1410714
cimourdain
Posté le 20-07-2006 à 23:36:18  profilanswer
 

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 !

n°1410837
flo850
moi je
Posté le 21-07-2006 à 09:47:48  profilanswer
 

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

n°1410997
cimourdain
Posté le 21-07-2006 à 12:16:11  profilanswer
 

ok merci je vais essayer


Message édité par cimourdain le 21-07-2006 à 12:21:47
n°1411067
cimourdain
Posté le 21-07-2006 à 13:34:15  profilanswer
 

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
n°1411297
oggo
no woman no cry
Posté le 22-07-2006 à 01:01:52  profilanswer
 

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
n°1411502
cimourdain
Posté le 22-07-2006 à 17:36:40  profilanswer
 

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
mood
Publicité
Posté le 22-07-2006 à 17:36:40  profilanswer
 

n°1411864
oggo
no woman no cry
Posté le 23-07-2006 à 21:25:23  profilanswer
 

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

n°1411903
cimourdain
Posté le 23-07-2006 à 22:27:23  profilanswer
 

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

n°1411924
mIRROR
Chevreuillobolchévik
Posté le 23-07-2006 à 23:04:28  profilanswer
 

c est pas un coup de magic quotes ?

n°1411932
cimourdain
Posté le 23-07-2006 à 23:24:32  profilanswer
 

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

n°1411935
cimourdain
Posté le 23-07-2006 à 23:29:59  profilanswer
 

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

n°1411937
mIRROR
Chevreuillobolchévik
Posté le 23-07-2006 à 23:33:29  profilanswer
 

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

n°1411945
cimourdain
Posté le 23-07-2006 à 23:58:15  profilanswer
 

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

n°1412032
oggo
no woman no cry
Posté le 24-07-2006 à 09:36:45  profilanswer
 

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

n°1412061
chani_t
From Dune
Posté le 24-07-2006 à 10:13:36  profilanswer
 

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

n°1412236
cimourdain
Posté le 24-07-2006 à 12:46:13  profilanswer
 

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.

n°1412238
chani_t
From Dune
Posté le 24-07-2006 à 12:53:59  profilanswer
 

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

n°1421963
casttlemeh​di
Posté le 07-08-2006 à 23:10:53  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
déspécialisation de caractères en XMLCouper une chaine de caractère
[Perl] générer une variable grace à une chaine[resolu] [batch] recherche chaine avec findstr
[VBA] RESOLU Extraction d'une chaine de caractères[javascript]supprimer le nieme caractère
Trier des caracteres avec accents ?[Résolu] Bug d'IE avec les caractères accentués.
[Batch] Insérer une chaine de caractère devant un nom de fichier[JAVA] supprimer les caractères spéciaux dans une chaine
Plus de sujets relatifs à : Supprimer des caractères spéciaux d'une chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR