strpos()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : strpos()

Re: strpos()

par abb » 18 août 2011, 10:28

Excellente explication j'ai enfin compris. Merci beaucoup, c'est bien plus clair.

Re: strpos()

par sirakawa » 18 août 2011, 10:14

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()

par Mazarini » 18 août 2011, 09:40

Dans le navigateur, utilise "afficher la source". Le navigateur interprète le contenu de ta variable.

Re: strpos()

par abb » 18 août 2011, 09:34

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()

par Mazarini » 18 août 2011, 09:21

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()

par AB » 18 août 2011, 05:29

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()

par sirakawa » 17 août 2011, 22:38

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()

par abb » 17 août 2011, 15:15

C'est exactement la même réponse. Pas d'amélioration

Re: strpos()

par Yosh » 17 août 2011, 14:10

Tu peux essayer sans le htmlspecialchars?

strpos()

par abb » 17 août 2011, 13:53

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?