Page 1 sur 1
recherche d'un chevron dans une chaîne
Posté : 21 oct. 2010, 18:02
par lanusquet
Bonjour à tous.
Je galère depuis un bon bout de temps sur le pb suivant. Comment tester une chaîne alphanumérique pour savoir s'il y a un chevron dedans ? (ouvrant ou fermant, < ou >). Je sais le faire avec n'importe quelle occurrence, mais ça ne marche pas pour les chevrons, ni avec les expressions régulières, ni avec strpbrk(). Ni en échappant les chevrons avec \.
Quelqu'un peut m'expliquer pourquoi ? Cordialement, jml.
Re: recherche d'un chevron dans une chaîne
Posté : 21 oct. 2010, 18:06
par stealth35
t'as fait quoi comme regexp ?
Re: recherche d'un chevron dans une chaîne
Posté : 21 oct. 2010, 22:35
par Invité
t'as fait quoi comme regexp ?
SI 'avais su, j'aurais attendu la réponse ! Je n'avais pas imaginé qu'elle arriverait si vite. Merci.
Voici les regexp essayées :
preg_match("#<#", $message)
preg_match("#\<#", $message)
preg_match("#'<'#", $message)
et tutti quanti !
Cordialement, jml.
Re: recherche d'un chevron dans une chaîne
Posté : 21 oct. 2010, 23:45
par stealth35
la2eme est la bonne pour rajouter l'autre c'est
preg_match('/[\<\>]/', $message)
Re: recherche d'un chevron dans une chaîne
Posté : 22 oct. 2010, 16:40
par lanusquet
la2eme est la bonne pour rajouter l'autre c'est
preg_match('/[\<\>]/', $message)
Encore merci de cette réponse.
... mais non ! Le résultat est TRUE, même si un chevron est inclus dans $message ! C'est aussi le cas de ma 2e solution à moi, du reste. De toute évidence, le chevron ne se comporte pas là comme un caractère alpha-numérique.
Cordialement, jml.
Re: recherche d'un chevron dans une chaîne
Posté : 22 oct. 2010, 19:36
par lanusquet
la2eme est la bonne pour rajouter l'autre c'est
preg_match('/[\<\>]/', $message)
Encore merci de cette réponse.
... mais non ! Le résultat est TRUE, même si un chevron est inclus dans $message !
Hum ! j'ai dit une sottise.

Le résultat doit être FALSE, j'imagine, puisque les conditions sur la regex sont passées sans arrêter le programme.
Re: recherche d'un chevron dans une chaîne
Posté : 22 oct. 2010, 19:43
par stealth35
si y'a un chevron dedans ca sera égale a true, a toi de faire la condition que tu souhaite apres sachant que tu peux inverser un true/false
Re: recherche d'un chevron dans une chaîne
Posté : 22 oct. 2010, 22:40
par lanusquet
si y'a un chevron dedans ca sera égale a true, a toi de faire la condition que tu souhaite apres sachant que tu peux inverser un true/false
Je te remercie de toutes ces réponses. En fait, le test que tu m'a donné ne marche pas. Voici mon code :
<?php
$message = 'aeiou<abcd>aeiou';
$message = htmlspecialchars($message);
echo $message.'<p>';
if(
preg_match('/[\<\>]/', $message)
)
{echo 'le chevron y est';}
else
{echo 'le chevron n\'y est pas';}
?>
Quel que soit le contenu de $message, avec ou sans chevron, l'affichage est le même : "le chevron n'y est pas."
Re: recherche d'un chevron dans une chaîne
Posté : 23 oct. 2010, 00:57
par moogli
salut,
normal le problème vient du
htmlspecialchars
comme le dit la doc
Description
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )
Certains caractères ont des significations spéciales en HTML, et doivent être remplacés par des entités HTML pour être affichés. htmlspecialchars() remplace tous ces caractères par leur équivalent dans la chaîne string. Cette conversion est très pratique pour la programmation web. Si vous devez remplacer tous les caractères, utilisez plutôt htmlentities() à la place.
htmlspecialchars() est pratique pour éviter que des données fournies par les utilisateurs contiennent des balises HTML, comme pour un forum ou un chat.
Les remplacements effectués sont :
"&" (et commercial) devient "&"
""" (guillemets doubles) devient """ lorsque ENT_NOQUOTES n'est pas utilisée.
"'" (guillemet simple) devient "'" uniquement lorsque ENT_QUOTES est utilisée.
"<" (inférieur à) devient "<"
">" (supérieur à) devient ">"
@+
Re: recherche d'un chevron dans une chaîne
Posté : 23 oct. 2010, 01:07
par lanusquet
[quote="moogli"]salut,
normal le problème vient du
htmlspecialchars
YES !!!!!!!!!!!!!!!!!! et merci beaucoup !
Une dernière question, si ce n'est pas abuser...
Vaut-il mieux échapper les caractères html et conserver le message tel quel, OU BIEN tester les chevrons et refuser le message envoyé si on en trouve ? Autrement dit, est-ce que ce test des chevrons suffit à écarter toute tentative d'envoi malveillant (javascript, etc...) dans un formulaire ? Cordialement, jml.
Re: recherche d'un chevron dans une chaîne
Posté : 23 oct. 2010, 01:28
par moogli
salut,
htmlspecials car est fait pour cela, mais à utiliser à l'affichage seulement.
si tu utilise mysql pour le résultat de tes formulaires, utilise mysql_real_escape_string avant insertion.
tu peut ainsi éviter de refuser un message parce que l'on y a écrit 28<1 mais 28>34 ^^
@+
Re: recherche d'un chevron dans une chaîne
Posté : 23 oct. 2010, 01:41
par lanusquet
Merci encore à Moogli et à Stealh35 pour votre aide précieuse et votre disponibilité. Cordialement, jml.
Re: recherche d'un chevron dans une chaîne
Posté : 23 oct. 2010, 01:44
par moogli
de rien
@+