OVH Cloud OVH Cloud

regexp et php sur WinXP

6 réponses
Avatar
Jimmy H
Bonjour

PHP 5.02 sur WinXP pro service Apache 2 .

J'ai 2 petites fonctions de filtrage d'entrées.

function nocripts($string){return eregi("[^<>]");}
et
function validstring($string){return eregi("[\w -]",$string) &&
noscripts($string);}

si j'applique ça à "gilbert_gilles-Joseph marc" , la fonction retourne faux.
Pourquoi?

Si je remplace la contrainte [\w] par [a-zA-Z -_] validstring retourne vrai

Est-ce que PHP sur Win est allergique aux racourcis ?

Aussi sur une série de tests reliés par && , j'obtenais faux mais pas avec
and.

???

non ne ne fume rien du tout !!! ;-)

merci

6 réponses

Avatar
CrazyCat
Jimmy H wrote:
Si je remplace la contrainte [w] par [a-zA-Z -_] validstring retourne vrai


Problème que j'ai rencontré récemment: les caractères spéciaux, tels que
w, proviennent des regexp en perl, il faut donc utiliser preg_* et non
ereg.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
Olivier Miakinen

function nocripts($string){return eregi("[^<>]");}
et
function validstring($string){return eregi("[w -]",$string) &&
noscripts($string);}

si j'applique ça à "gilbert_gilles-Joseph marc" , la fonction retourne faux.
Pourquoi?


Attention, je ne suis pas sûr que les expressions rationnelles de type
« ereg » comprennent le w. Ton expression risque de n'accepter que le
trait d'union, l'espace et la lettre w (plus peut-être l'antislash).

Si je remplace la contrainte [w] par [a-zA-Z -_] validstring retourne vrai


Ah oui, mais là tu acceptes tout un tas d'autres caractères aussi, qui
sont les suivants : « !"#$%&'()*+,./0123456789:;<=>?@[]^ » !

Si tu ne veux que les lettres et le blanc souligné en plus de l'espace
et du tiret, tu dois mettre le tiret en début ou en fin de séquence :
[a-zA-Z _-] ou [-a-zA-Z _].

Aussi sur une série de tests reliés par && , j'obtenais faux mais pas avec
and.


http://www.php.net/manual/fr/language.operators.logical.php
http://www.php.net/manual/fr/language.operators.php#language.operators.precedence
<cit.>
gauche && logique
gauche || logique
gauche ? : ternaire
droite = += -= *= /= .= %= &= |= ^= <<= >>= assignement
gauche and logique
gauche xor logique
gauche or logique
</cit.>

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
Jimmy H
Bonjour

Tu as parfaitement raison.
Ce sera maintenant plus intéressant. Les regexp PERL sont plus puissantes
que PHP.

Et pour $result=( F(0) && F(1) ....) ne marche pas
$result=(F(0) and F(1) ....) ca marche, tu as une réponse ?
toutes les F() retournent un résultat de comparaison logique (True | False)

Merci

"CrazyCat" a écrit dans le message de news:
d0prnt$kgv$
Jimmy H wrote:
Si je remplace la contrainte [w] par [a-zA-Z -_] validstring retourne
vrai



Problème que j'ai rencontré récemment: les caractères spéciaux, tels que
w, proviennent des regexp en perl, il faut donc utiliser preg_* et non
ereg.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net



Avatar
Jimmy H
Bonjour

Attention, je ne suis pas sûr que les expressions rationnelles de type
« ereg » comprennent le w. Ton expression risque de n'accepter que le
trait d'union, l'espace et la lettre w (plus peut-être l'antislash).


C'est ce que CrazyCat m'a souligné aussi. Je crois que c'est probablement dû
à ce que j'utilise PHP sur WinXP. Je n'ai jamais eu ce genre de pb sur mon
pingouin. Mais là il a les 2 pattes sur la bavette du poêle. En vacances
qu'il me crache quand je veux le faire travailler. (système en panne)

Ah oui, mais là tu acceptes tout un tas d'autres caractères aussi, qui
sont les suivants : « !"#$%&'()*+,./0123456789:;<=>?@[]^ » !


Oui je sais. Mes règles n'étaient que pour imager. C'est comme ma fonction
noscript() qui est sencée refuser tout string contenant un "<>", c'est sencé
être un filtre anti-injections !! ;-)) En tout cas je ne le conseille à
personne !!!


http://www.php.net/manual/fr/language.operators.logical.php

http://www.php.net/manual/fr/language.operators.php#language.operators.prece

dence

JE connais la différence entre les opérateurs bitwise et les opérateurs
logiques. && est un opérateur logique utilisé ici pour résumer une série de
tests produisant des résultats logiques.

$result = (F(0)[true | false] && F(1)[true | false] ....)

De toute façons ça fonctionne avec AND. J'imagine que ce doit être un autre
caprice de Windows.

Merci

Avatar
Olivier Miakinen

http://www.php.net/manual/fr/language.operators.logical.php

http://www.php.net/manual/fr/language.operators.php#language.operators.prece

dence

JE connais la différence entre les opérateurs bitwise et les opérateurs
logiques.


Oui, moi aussi. Je ne parlais absolument pas des opérateurs bitwise,
« & » et « | », mais de la différence de priorité entre les opérateurs
logiques « && » et « || » d'une part, et les opérateurs logiques « and »
et « or » d'autre part.

Il semblerait par exemple que :
$result = F(0) && F(1)
donne un résultat différent de :
$result = F(0) and F(1)

$result = (F(0) && F(1))


Évidemment, si tu n'oublies jamais aucune paire de parenthèses, les
différences de priorités n'ont plus aucune influence sur le résultat.

De toute façons ça fonctionne avec AND. J'imagine que ce doit être un autre
caprice de Windows.


Si tu trouves vraiment un bug sur Windows, ce serait sympa de le
signaler pour faire mettre la doc à jour.


Avatar
Jimmy H
Bonjour

$result = (F(0) && F(1))

De toute façons ça fonctionne avec AND. J'imagine que ce doit être un
autre


caprice de Windows.


Si tu trouves vraiment un bug sur Windows, ce serait sympa de le
signaler pour faire mettre la doc à jour.


Tu connais la dernière ?

J'ai remis tous les && à la place des AND et devines ... tout marche. C'est
à n'y rien comprendre.
Je ne sais trop quoi en penser.

Auparavant je travaillais sur WinME avec PHP4. C'était commode pour un tas
de raisons et je convertissais en *nix pour l'envoi sur le pingouin.
Problèmes avec une copie de sécurité, bon je décide d'installer XP pro au
lieu de ME.

Depuis je ne cesse d'avoir des problèmes bizarres du genre de celui-ci. J'ai
l'impression que XP est buggé ou que PHP5 a des problèmes.