Page 1 sur 1

strpos()

Posté : 17 août 2011, 13:53
par abb
Bonjour,
j'ai un problème avec strpos()

ici la fonction qui marche nickel:
 <?php
    $mystring = 'abc';
    $findme   = 'a';
    $pos = strpos($mystring, $findme);
    if ($pos === false) {
        echo "La chaîne '$findme' n'a pas été trouvée dans la chaîne '$mystring'";
    } else {
        echo "La chaîne '$findme' a été trouvée dans la chaîne '$mystring'";
    }
    ?>


Ici la mienne qui ne marche pas
$url = 'http://www.google.fr';
$http_page = file_get_contents($url);
$http_page_ = htmlspecialchars($http_page);
$findme   = ('<a href="http://www.google.fr');
$pos = strpos($http_page_, $findme);
 
if ($pos === false) {
    echo "The string '$findme' was not found'";
} else {
    echo "The string '$findme' was found '";
    echo " and exists at position $pos";
}
une idée?

Re: strpos()

Posté : 17 août 2011, 14:10
par Yosh
Tu peux essayer sans le htmlspecialchars?

Re: strpos()

Posté : 17 août 2011, 15:15
par abb
C'est exactement la même réponse. Pas d'amélioration

Re: strpos()

Posté : 17 août 2011, 22:38
par sirakawa
et un truc plus basique qui consisterait à faire afficher
$http_page_
des fois qu'(il ne contienne pas la chaîne cherchée :
$findme = ('<a href="http://www.google.fr');
non compris que ça doit rouspéter sur la double quote pas fermée

Voici un code sans erreur:
<?PHP
$url = 'http://www.google.fr';
$http_page = file_get_contents($url);
$http_page_ = htmlspecialchars($http_page);
$findme   = "<a href='http://www.google.fr";
$pos = strpos($http_page_, $findme);
 
if ($pos === false) 
{
    $message ="The string n'est pas trouvée";
}
else 
{
    $message="The string existe en position $pos";
}
print "$message";
?>
qui ne trouve rien car dans http://www.google.fr, il n'y a pas de simple <a href=....
on pourrait juste chercher http://www.google.fr
Si yu n'es pas convaincu, fais afficher le code source de cette page et cherches-y ton wa href='.... pour voir,
Il faudrait peut-être une expression rationnelle, mais ce soir j'ai la flemme...

Re: strpos()

Posté : 18 août 2011, 05:29
par AB
non compris que ça doit rouspéter sur la double quote pas fermée
Heu oui, y 'avait beaucoup de fautes dans le code mais pas de quoi rouspéter sur la "double quote pas fermée".

Dans l'exemple ci-dessous :
$chaine = '<a href="http://www.google.fr';
la variable $chaine est une chaine de caractères tout à fait valide (donc on peut l'utiliser comme critère de recherche avec strpos) :wink:

Re: strpos()

Posté : 18 août 2011, 09:21
par Mazarini
Comme dit précédemment, il faut vérifier le contenu des 2 variables pour vérifier si le résultat du strpos est conforme à ce que tu vois.

Pour cette vérification, regarde le source de la page, l'affichage dans le navigateur est déjà interprété (suppression de blancs...).

Re: strpos()

Posté : 18 août 2011, 09:34
par abb
Comme le précise AB vu que nous sommes dans une chaine le double cote n'a pas d'importance.
Par contre j'ai remarqué que si je met ça:
$findme   = "http";
print "$findme";
A l'écran j'ai bien http qui apparait et la recherche est trouvée

Par contre si je mets ça:
$findme   = "<http";
print "$findme";
Le print ne fonctionne plus et la recherche n’aboutit pas. (idem avec print). J'ai même un écran tout blanc.

ps: j'utilise le code sirakawa

Re: strpos()

Posté : 18 août 2011, 09:40
par Mazarini
Dans le navigateur, utilise "afficher la source". Le navigateur interprète le contenu de ta variable.

Re: strpos()

Posté : 18 août 2011, 10:14
par sirakawa
Si tu mets qqch qui s'interpète comme le début d'une balise sans la fermer (c'est le cas de <http>, ) le navigateur attend la fin de la balise:
<?PHP
$visible = 'http';
print "visible $visible<br />";
$invisible = "<http>";
print "invisible $invisible car c'est un morceau de  balise mais affiche le code source<br />";
$invisible_2 = "<http://www.google.fr>";		
print "invisible $invisible_2 mais affiche le code source<br />";
$visible_2 = "<a href='http://www.google.fr' >l";		
print "invisible $visible_2<br />";
print "rendu visible en finissant la balise </a>"; // commenter cette ligne pour comprendre
?>
Dans le cas de ta page google, à moins que google ne soit qu'un exemple :
sachant que ce que tu cherches contient toujours http, et que http est toujours précédé de <, mais pas forcément immédiatement (regarde le code de google..) il me semble inutile de mettre le < dans la chaine cherchée. Mais il me semble de plus en plus qu'il faut se pencher sur les expressions régulières (ou rationnelles PCRE http://www.expreg.com/pcre.php en t'entraînant d'abord sur ces trucs faciles pour bien comprendre comment ça carbure, puis de construire l'expression après avoir observé des codes HTML pour voir tout ce qui peut se glisser dans la balise de base.
extrait de la page google:
<a onclick=gbar.qs(this) class=gbmt id=gb_10 onclick="gbar.logger.il(1,{t:10})" href="http://books.google.fr/bkshp?hl=fr&tab=wp">Livres</a>
< obligatoire
un certain nombre de trucs
href
des espaces possibles
=
des espaces possibles
....

Re: strpos()

Posté : 18 août 2011, 10:28
par abb
Excellente explication j'ai enfin compris. Merci beaucoup, c'est bien plus clair.