strpos simple mais ne marche pas RESOLU

WRInaute discret
Salut,

J'ai un problème vraiment bizarre. J'utilise un simple strpos pour savoir si des caractères spéciaux sont présents dans une chaîne mais je ne parviens pas à faire fonctionner ce simple exemple :

Code:
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring,$findme);

echo $pos.'<br/>';

Y aurait-t-il quelque chose au niveau des versions de php ou autre ?

J'utilise wampserver 2.0
PHP 5.3.0
apache 2.2.11
mysql 5.1.36

C'est la première fois que j'ai un souci sur un script aussi basique.

D'avance merci bcp

John :D
 
WRInaute accro
Re: strpos simple mais ne marche pas

C'est normal ... strpos est bugguée lorsque la reponse est octet offsset 0 ...

Moi perso je faits toujours ca :

$mystring = 'abc';
$findme = 'a';
$pos = strpos('*'.$mystring,$findme);

et du coup je test si $pos>0
 
WRInaute accro
Non il est pas buggué. Il suffit de savoir l'utiliser correctement ^^

Par exemple tant qu'on trouve blanc se traduit:
while (strpos('blanc',$str) !== FALSE)


A noter les opérateurs (!== et ===) sont différents de (!= et ==).
 
WRInaute accro
je trouve perso plus simple de n'avoir a faire qu'un test numerique et pas d'ajouter un test vrai faux. Juste une question de choix.

Et si c'est un bug pour une commande de ne pas savoir retourner la position 0 ...
 
WRInaute accro
Non c'est logique, ca te retourne la position de la chaine si elle existe. Donc 0 (false) ne peut pas être retourné en cas d'erreur.
 
WRInaute accro
YoyoS a dit:
Non c'est logique, ca te retourne la position de la chaine si elle existe. Donc 0 (false) ne peut pas être retourné en cas d'erreur.
0 c'ets pas false, c'est offset 0 ... et pour retourner false d'autres langages retournent -1

du coup

si pos >0
ok trouvee
sinon
pas trouvé
fin de si

C'est quand meme plus cool que devoir faire deux tests (un pour chaine trouvée et un second pour position trouvée). A mon avis
 
WRInaute accro
Quand je dis 0 == false c'est dans le test d'existence.
Essaie de faire

Code:
$var1 = 0;
$var2 = false;
if (!$var1 && !$var2)
-> On entre dans le if


Et non réfléchis 2 secondes, c'est pas normal de dire

Code:
si pos >0
ok trouvee
sinon
pas trouvé
fin de si

Lis la doc de strpos et tu verras que c'est:
Code:
si pos !== FALSE
ok trouvee
sinon
pas trouvé
fin de si

Si pos vaut 0 (après le test d'existence !== FALSE) ca veut dire que la chaine est a été trouvée en position 0. Maintenant arrête de crasher des boules de poils, c'est pas moi qui ait inventé la fonction. Si ca été fait comme ça c'est qu'il y a une raison j'imagine, que ça soit pour les performances ou pour trouver quelques chose de générique. C'est la doc c'est comme ça mon chat :mrgreen:

Il est même marqué en rouge dans un cadre rouge ici http://www.php.net/manual/fr/function.strpos.php comment l'utiliser ^^
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut