strpos simple mais ne marche pas RESOLU

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
 
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
 
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 ==).
 
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 ...
 
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.
 
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
 
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