Remplacer des caractères interdits en fonction d'une liste dans une chaîne

Eléphant du PHP | 63 Messages

29 avr. 2008, 13:54

Salut à tous !
Je suis de retour !
Voilà mon titre est un peu bizarre mais je vous explique :
Pour contrôler les entrées d'un formulaire (genre blog), je veux remplacer tous les caractères qui ne font pas partie de ma liste par un espace (ou autre). En sachant qu'il s'agit d'UTF8. J'ai développé ce script avec mes pieds et il toune mais il n'est pas beau... Est-ce que quelqu'un pourrait m'aider ?

Voici l'URL du résultat : http://www.adinfos.info/sitedelafamille/carac.php

Voici le code :

Code : Tout sélectionner

<html> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <body> <?php // Caracteres acceptes accents et majuscule de a-z àâ éèêë îï ôö ùüû 0-9 &"#'(-_@)+=$£*%!:.,?/€ espace et retour à la ligne //Si Magic Quotes activées ok deslashes if (get_magic_quotes_gpc) { $chaine_a_controler = stripslashes($_POST['test']) ; } else { $chaine_a_controler = $_POST['test'] ; } // Caracteres autorisés $caracteres_autorises = array (' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','à','â','ä','ç','é','è','ê','ë','î','ï','ô','ö','ù','û','ü','À','Â','Ä','Ç','É','È','Ê','Ë','Î','Ï','Ô','Ö','Ù','Û','Ü','&','"','#','\'','(','-','_','@',')','+','=','$','£','*','%','!',':','.',',','?','/','€',"\r","\n") ; // Taille de la chaine $taille = mb_strlen($chaine_a_controler,"UTF8") ; // variable qui contiendra le résultat final $new_chaine = "" ; for ($i=0 ; $i<=($taille-1) ; $i++) { $present = 0 ; for ($j=0 ; $j<=(count($caracteres_autorises)-1) ; $j++) { if ((mb_substr($chaine_a_controler,$i,1,"UTF8") == $caracteres_autorises[$j])) { $new_chaine .= mb_substr($chaine_a_controler,$i,1,"UTF8") ; $present = 1 ; } } if ($present != 1) { $new_chaine .= " " ; } } echo 'Nouvelle chaine = '.nl2br($new_chaine).'<br />' ; ?> <form action="carac.php" method="post"> <textarea name="test"></textarea> <input type="submit" value="C'est parti"> </form> </body> </html>
Voilà, s'il y a quelqu'un merci et à bientôt !

Eléphant du PHP | 121 Messages

08 mai 2008, 10:55

Hmm... j'ai envie de demander : mais pourquoi faire ?

Si c'est pour filtrer le contenu des chaines, il y a déjà pleins de fonctions merveilleuses pour cela.

Si c'est pour simplement virer '<' et '>' (qui n'apparaissent pas dans ta liste si mes yeux ne me jouent pas de tours) tu peux utiliser htmlentities() pour les échapper. Bon, ils seront toujours affichés, mais ne seront pas dangereux.

Sinon, il vaut toujours mieux chercher à supprimer les caractères que l'on ne veut pas plutôt que laisser en vie tous les caractères que l'on accepte.
$text = "Youpi < ça va > ?";
$text = str_replace(array('<', '>'), '', $text);

Eléphant du PHP | 63 Messages

18 mai 2008, 15:15

Merci Gofromiel pour ta réponse... (Super les filtres ! D'ailleurs grâce à toi, j'ai trouvé ma signature sur le forum !)

Mais je ne suis capable que de suivre l'adage : tout ce qui n'est pas autorisé est interdit ! Ayant moins de talent que toi (et c'est sincère ! Après lecture de tes travaux sur le web ! Impressionnant !)

D'ailleurs, est-ce que tu me permets de te contacter en MP pour te poser quelques questions ?

Très cordialement,

zeuf