Bonjour,
J'aimerais faire un ptit bout de code qui permettrait de trouver tous les liens dans une page et de les ouvrir dans une nouvelle fenêtre a chaque fois...
Est-ce possible ? Pouvez-vous m'aider ? Par ou dois-je commencer svp ?
Merci
++
Bonjour,
J'aimerais faire un ptit bout de code qui permettrait de trouver tous les liens dans une page et de les ouvrir dans une nouvelle fenêtre a chaque fois...
Est-ce possible ? Pouvez-vous m'aider ? Par ou dois-je commencer svp ?
Merci
++
Salut,
A mon avis, tu devrais commencer par les etapes suivantes :
- prendre le contenu de la page (le code HTML donc) soit avec fsockopen soit avec CURL
- tu recherches les liens avec des expressions régulières
- tu affiches les pages..
Ok mais en fait c'est surtout pour les expressions régulieres que ca se complique, ca devient plus délicat, parce que j'aimerais ouvrir tous les liens, même si c'est du type http://www.url.com/page.php?go=111&p=5555
Enfin vraiment toutes les urls quoi et non ceux du type www.domaine.com
Et après je pense le deuxieme probleme, c'est pour le fait d'ouvrir chaque lien dans une nouvelle page, je me demande meme si c'est possible avec php ? Ne faut-il pas passer par du javascript ?
MErci
++
Re, c'est encore moi, voila j'ai du trouvé du javascript pour ouvir une fenetre a chaque fois grave a un for en php mais maintenant il me faut une expression réguliere pour récuperer dans une chaine de caractere $texte toutes les urls présentes...
Merci
++
va voir cette page http://lyhana8.free.fr/index.php?include=source.php&wsc=source.php
c'est une page a moi qui me permet d'afficher les sources de mes script et remplaçant les nom de fichier .php, .js ou . htm par un lien pointant vers eux. Pour ca j'utilise des expression regulieres:
la chaine sera de type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $h_str = eregi_replace("(['\" =])(([a-zA-Z0-9_-]+)\.(php|css|js|htm))([\?'\" ])", "\\1<a href='index.php?include=source.php&wsc=\\2' >\\2</a>\\5", highlight_file($p_file, TRUE));
et remplacer par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part (['\" =])(([a-zA-Z0-9_-]+)\.(php|css|js|htm))([\?'\" ])
On travaillera avec la chaine :
Code : Sélectionner tout - Visualiser dans une fenêtre à part \\1<a href='index.php?include=source.php&wsc=\\2' >\\2</a>\\5
bon vite fais: les \\numero correspondante aux different block de parenthese (le numero indique la parenthese ouvrante du bloc).
Code : Sélectionner tout - Visualiser dans une fenêtre à part highlight_file($p_file, TRUE)
par exemple ici \\1 sera remplacer par l'un des caracteres suivants :(celui qu'elle aura trouver, ya un espace !).
Code : Sélectionner tout - Visualiser dans une fenêtre à part (['\" =]
toi en gros il faut que tu recherche les truc genre
Donc j'espere que tu es pas trop bordelique niveau guillemets espace ou autre dans tes balises sinon ca va etre un peu plus galere.
Code : Sélectionner tout - Visualiser dans une fenêtre à part href="blabla.php"
Pour ta chaine regexp va voir ca http://fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re (si t'y connais rien en regexp ca pourra t'aider un peu).
Je peu te proposer ca:
decoupage des parametres:
Code : Sélectionner tout - Visualiser dans une fenêtre à part (href=")(([a-zA-Z0-9_-]+)\.(php|htm))(\?[a-zA-Z0-9_-&=]*)(\")
la chaine de remplacement (que tu utilisera pour ton javascript) sera du type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 \\1 (href=") \\2 (([a-zA-Z0-9_-]+)\.(php|htm)) \\3 ([a-zA-Z0-9_-]+) \\4 (php|htm) \\5 (\?[a-zA-Z0-9_-&=]*)
Ce qui devrai donc donner:
Code : Sélectionner tout - Visualiser dans une fenêtre à part href="\\2\\5"
Mai je ne garanti rien, les regexp, c'est tout un art il te faudra peut etre modifier le 1er parametre de eregi_replace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $js = eregi_replace("(href=")(([a-zA-Z0-9_-]+)\.(php|htm))(\?[a-zA-Z0-9_-&=]*)(\")", "href='\\2\\5'", $ch); $ch la source de ton fichier htm je suppose.
bonne chance
très bon post avec de très bonne explications, par contre essaie de travailler avec les expressions régulières perl qui sont plus performante
preg_replace()
Pierre
euh oui merci mais j'ai pas vraiment tout compris la... je sais pas si t'as vraiment compris ce que je cherchais a faire en fait...
Par exemple, j'ai ceci, j'ai un texte dans la variable $texte :
$texte="Slt, ca va, une adresse http://www.domaine.com et puis ca aussi http://www.domaine.com/page.php?aaa=eee&bbbb=ffff et voila, aller encore une http://www.aaaa.com/index.php !"
Et j'aimerais au final, pouvoir affiché les adresses comme ca par ex :
http://www.domaine.com
http://www.domaine.com/page.php?aaa=eee&bbbb=ffff
http://www.aaaa.com/index.php
Merci ++[/quote]
moi j'utilise cette petite fonction qui a l'air de bien marcher.. mais je ne suis pas un grand pro des expressions regulieres.. donc sans garantie ..
et ta variable $ret, contient un tableau avec toutes tes urls trouvées dans les attributs href, src et url.. bien sympa !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function get_urls($string, $strict=true) { $types = array("href", "src", "url"); while(list(,$type) = each($types)) { $innerT = $strict?'[a-z0-9:?=&@/._-]+?':'.+?'; preg_match_all ("|$type\=([\"'`])(".$innerT.")\\1|i", $string, &$matches); $ret[$type] = $matches[2]; } return $ret; }
oki tu pourrais donner un exemple entier, concret zevince stp... pour voir comment l'utiliser...
Merci
++
Je peux te propose ca:
$js = preg_match_all("(http://)(([a-zA-Z0-9_-]+)([\/]+)\.(php[\?]?))([a-zA-Z0-9_-&=]*)", "\\2\\5'", $texte);
mais je ne garantie pas la validiter de la regexp
regarde les exemple de cette fonction : http://fr3.php.net/manual/fr/function.preg-match.php il ya un exemple Lire un nom de domaine dans une URL, qui je pense contient la regexp que tu cherches, a savoir:
Apres a toi de bidouiller pour faire exactement ce que tu cherches.
Code : Sélectionner tout - Visualiser dans une fenêtre à part /^(http:\/\/)?([^\/]+)/i
Ici les url ayant des parametre seraient recuperer sans les parametres, regarde les liens sur l'article de wikipedia un des sites explique assez bien.
voila, bon courage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <?php // repérer le nom de l'hôte dans l'URL preg_match("/^(http:\/\/)?([^\/]+)/i", "http://www.php.net/index.html", $matches); $host = $matches[2]; ?>
Bonjour,
Voila, j'ai essayé en mettant que le début commence par href=' et la fin par ' mais ca ne marche pas, quelqu'un pourrait me dire pourquoi svp ?
Merci
++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $string = "<a href='http://www.aaaa.com'>exemple : </a>"; if (eregi("^(href=')(')$", $string)) { echo "'$string' contient bien une adresse!"; }
Ton texte est-il en html ou c'est un texte basique? Si html, zevince t'a donné la réponse car en fait il ne suffit que de récupérer l'adresse comprise dans le href de la balise <a>.
moi je ferais ça côté client
j'ouvre la page html en php et j'y colle au passage un js qui fait la chose
pour cela js te donne getElementsByTagName qui te retourne un table de XMLNodes
pour chaque noeud de la table tu récupère son attribut hef s'il existe tu y ajoute un attribut target
c'est extrêment simple
tu peux aussi faire ça côté php avec le DOM si tu est sur que html de la page est conforme.
A+JYT
Slt
En fait c'est du texte basique, par exemple, voici ce que j'ai essayé, ca marche toujours pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <?php function get_urls($string, $strict=true) { $types = array("href", "src", "url"); while(list(,$type) = each($types)) { $innerT = $strict?'[a-z0-9:?=&@/._-]+?':'.+?'; preg_match_all ("|$type\=([\"'`])(".$innerT.")\\1|i", $string, &$matches); $ret[$type] = $matches[2]; } return $ret; } echo get_urls('<a href="http://www.aaaa.com">exemple : </a>'); ?>
Normal car sa renvoie un tableau, pour l'afficher:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function get_urls($string, $strict=true) { $types = array("href", "src", "url"); while(list(,$type) = each($types)) { $innerT = $strict?'[a-z0-9:?=&@/._-]+?':'.+?'; preg_match_all ("|$type\=([\"'`])(".$innerT.")\\1|i", $string, &$matches); $ret[$type] = $matches[2]; } return $ret; } $test = get_urls('<a href="http://www.aaaa.com">exemple : </a>'); echo '<pre>'."\n"; print_r($test); echo '</pre>'."\n";
oki merci ca marche, je récupere donc les adresses avec $test[href][0] puis $test[href][1] etc...mais comment faire pour toutes les récupérer sans savoir combien il y en a ? J'ai essayé avec un foreach mais je ne vois pas trop comment faire en fait...
Merci
++
Partager