INTERDIRE CERTAINS CARACTÈRES.

milkasoprano Messages postés 239 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 1 juillet 2007 - 11 janv. 2006 à 16:50
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 14 janv. 2006 à 18:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35510-interdire-certains-caracteres

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 janv. 2006 à 18:16
kancrelune, je ne suis pas sur que la pattern soit ici appropriée au problème...
selon moi, t'as un truc comme ça :

if ($chaine!==str_replace($array_bad_char_and_words, ' ', $haine))
echo 'mot(s) interdits !';
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 janv. 2006 à 17:47
Ouep c'est clair que si tu as beaucoups de caractères interdits la regexp sera la plus adaptée... je disais surtout ça à titre informatif et dans le cas de seulement trois ou quatres caractères interdits... .. .

@ tchaOo°
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 janv. 2006 à 14:59
$mots_interdits=array();

m'enfin ça reste quand même complexe pour ce qu'il y a à faire :-)
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
14 janv. 2006 à 13:52
Ok, je vais changer les <? en <?php
mais sinon, ca changerais quoi error reposting E_ALL.
et comment déclarer ma variable ? en faisant : $mot_inderdits = '' ?

Ensuite, pour une fonction, pourquoi pas, c'est une bonne idee.
A++
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 janv. 2006 à 10:43
au départ, ta variable $mot_interdits[ n'est pas déclarée...

tu utilise des <? à la place des <?php

un foreach et une fonction pourraient être utiles pour faire ces tests... là, c'est pas super super exploitable...

bref, met error reposting à E_ALL
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 janv. 2006 à 10:02
Kankrelune > t'es obligé d'en utiliser plusieurs, ça devient grade (ça revient au même que strpos à peu de choses près) donc Arnauti la réponse est non :-( tandis que l'expression régulière va voir si il y a un ou plusieurs caractères qu'ils se suivent ou non.
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
14 janv. 2006 à 09:44
Et si il y a plusieurs caractères et ce que ca peut marcher ?
A++
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
14 janv. 2006 à 02:42
Sinon y a http://fr2.php.net/manual/fr/function.stristr.php

et ça sera bien plus rapide qu'une regexp... .. .

if(!stristr($montext, 'moncharactèe')){
// c'est ok
}

@ tchaOo°
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
12 janv. 2006 à 11:09
Bonjour,
la solution d'Anthomicro est sans doute plus rapide mais moins claire je trouve pour les débutants.
Sinon, Arto_8000 pourquoi pas, mais comme tu le dis toi même, on ne voit pas tout les caractères que l'utilisateurs a entrés et qui ne sont pas acceptés.
Bon, la maintenant, je vais corrigé un peux la source, mais, je vais gardé mais technique car plus simple pour les débutants comme moi.

A++
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
12 janv. 2006 à 00:34
Pour amélioré la rapidité de ton script tu pourrait rajouter un break après qu'un caractère interdit soit trouvé au lieu de continuer à tester les autres caractères. C'est sur que ça te retourne pas tout les caractères que tu dois pas utiliser, mais au moins c'est plus rapide si ta plusieurs caractères à tester. Sinon la solution d'Anthomicro est très bonne les expressions peuvent très bien faire le travail et son facile d'utilisation.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 janv. 2006 à 23:14
Salut,

T'as un truc beaucoup plus simple et surement plus rapide à mon avis : les expressions régulières. Je sais pas si ta solution est plus rapide (je ne pense pas, mais c'est à tester :-) ), mais regarde ça par exemple :
if(eregi("[@'$()*+<>?#"{}\\]",$chaine))
{
//cette chaîne contient soit le caractère @ soit ' soit $ ...
}

a +
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
11 janv. 2006 à 21:32
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
11 janv. 2006 à 21:13
Salut, je vais faire ce que tu dis pour optimiser un peu, mais pour foreach() je ne connais pas et je ne souhiates pas me lancer la dedans sans en connaitre plus.
Si tu a un tuto qui explique bien foreach() dit le moi stp.

A++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
11 janv. 2006 à 17:55
Il valait mieux faire if ($position !== false) plus exactement.
Ta condition avec true est en effet tirée par les cheveux. Si elle fonctionne...elle reste incorrecte. C'est de la programmation brouillon ;-)
strpos () renvoie false en cas d'échec, ou un integer en cas de succès, integer donnant la position du caractère trouvé.

au passage, if ($position !false) est faux. Parce que si strpos () trouve le caractère à la position 0 (1er caractère de ta chaîne), cette condition va être vérifiée. 0 false. Aors que 0 !== false.
Ensuite, un foreach sur ton tableau de mots interdits aurait été plus judicieux et aurait raccourci le code.
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
11 janv. 2006 à 17:43
Nous on veux savoir si il trouve, donc, je pense que c'est juste. Sinon, tu peut être voulais dire qu'il faudrait mieux faire : if ($position != FALSE) ?
A++
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
11 janv. 2006 à 17:31
strpos() ne renvoit pas TRUE...

http://fr2.php.net/manual/fr/function.strpos.php

Attention de ne pas tout mélanger :)
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
11 janv. 2006 à 16:56
Oui, je l'ai fait pour ça et aussi parce que je me suis dis qu'il faudrais peut-être qu'un jour je poste une source ^^.
Sinon, lorsque je mettrais les commentaires pour le script, je corrigerais aussi le <? en <?php
je ne le fait pas tout de suite car je ne voudrais pas faire 36 updates ^^.

A++
milkasoprano Messages postés 239 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 1 juillet 2007
11 janv. 2006 à 16:53
en plus je remarque que tu as fais cette source expres pour moi non ? vu que javai posté une petite aide et tu as surement remarqué qu'il nexistait pas de source comme celle la sur phpcs :) non ? je me trompe peut etre :) en tous cas merciii !
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
11 janv. 2006 à 16:53
De rien, et merci a toi pour le 9.
A++
milkasoprano Messages postés 239 Date d'inscription jeudi 21 juillet 2005 Statut Membre Dernière intervention 1 juillet 2007
11 janv. 2006 à 16:50
Merci pour cette source :) c'est exactement cela que je cherchais pour mon site...comme tu avais pu le constater javai commencé mais faire avec un array :s c'était pas si simple! mais je vois maintenant comment tu as fais... merci ! j'ai fais quelques modifs pour ajuster ca a ce que je voulais ;)
merci encore :)