Supprimer des caractères spéciaux d'une chaine - PHP - Programmation
Marsh Posté le 20-07-2006 à 21:12:33
ReplyMarsh 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 ?
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.
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 !
Marsh Posté le 21-07-2006 à 09:47:48
str_replace (la_liste_des_caractère_interdit , rien , chaine de l'utilisateur)
Marsh Posté le 21-07-2006 à 12:16:11
ok merci je vais essayer
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 :
|
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
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 :
|
résultat obtenu avec $phrase -> test___
Voila, j'espère que ca t'aidra...
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 :
|
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 :
|
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
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 ?
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 !
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
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
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 !!
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.
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
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.
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
Marsh Posté le 07-08-2006 à 23:10:53
Bon, Pour le backslash :
$texte = str_replace("\\", "", $texte);
le reste suis la meme logique
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