Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: document.links w php (DOM)
Forum PHP.pl > Forum > PHP
Dex1987
Witam,

probuje zrobić w php funkcje działającą tak samo jak document.links (JS). Szukałem na pl.php.net/dom jakiegoś odpowiednika, ale nie widziałem niczego podobnego, probowałem coś kombinować z getAtribute, ale nie wchodziło mi to. Czy jest w ogóle możliwe zrobienie czegoś takiego tylko w php, jeśli tak to proszę o jakieś nakierowanie.

Pozdrawiam.
Cysiaczek
Yhh? Tzn jak? Chcesz w php wyciagnąc linki jakie są w dokumencie? Coś nie rozumiem: /
Dex1987
@Cysiaczek w JS masz taka funkcje document.links, to jest tablica z wszystkimi linkami z danego pliku html, potrzebuje takiej funkcji w php, np: wczytuje za pomaca file_get_contents plik html, i dodaje do jakiejś zmiennej wszystkie linki z tego dokumentu, przed chwilą bawiłem się DOMDocuments i udało mi sie wyciągnąc nazwę linku (<a href="plik.php">nazwa linku</a>), ale ja potrzebuje wyciągnąć plik.php, probowałem ułożyć wyrażenie regularne, ale nie mogę napisać takiego które będzie działać w większości przypadków, tzn:

Kod
<a href="link">link</a>
<a href='link'>link</a>
<a href=link>link</a>
<a href=link class="">link</a>
<a href="link">link</a>


itp... różnie ludzie piszą i trudno jest napisać takie wyrażenie które będzie działać w większości przypadków, dodatkowo document.links rozpoznaje czy link jest adresem tylko do pliku (href="index.php") czy adresem do pliku wraz z domeną (href="http://domena.pl/index.php"), jeśli jest tylko adresem do linku dodaje domenę.

Ogólnie mówiąc chce napisać funkcję która będzie wyszukiwać wszystkie linki i dodawać je do tablicy, dodatkowo jeśli nie będzie w linku domeny, funkcja sama ją doda, czyli coś takiego jak odpowiednij javascriptowej funkcji document.links tylko w php.
Cienki1980
Gotowego chyba nic nie ma ... jedynie coś stworzyć samemu.

Ja bym szukał tekstu href .... potem znaczników > < oraz string'a między nimi.

Potem usunąć spacje za pomocą trim() .... no i może sprawdzenei czy jest tam string http:// ...

I jakoś tak może by zadziałało.
lopik
A musi to być w php questionmark.gif
Dex1987
@lopik: tak, napisałem to w ajax/php ale nie odpowiada mi takie rozwiązanie.
@Cienki1980: jeśli nie znajdę nic podobnego, będę musiał kombinować z preg_match, co prawda napisałem coś takiego ale, ale daleko mojej funkcji do document.links

Pozdrwiam
ActivePlayer
moze zawierac bugi:
  1. <?php
  2. function get_links_from_href($string, $from_site){
  3. if(!$string || !$from_site)return;
  4. $end=array();
  5. $end['url_inside']=0;
  6. $end['url_outside']=0;
  7. $url=parse_url($from_site);
  8. $url['dir']=preg_replace("|^(.*)/.*..*$|i","1",$url['path']);
  9. preg_match_all("/<a href=["']{1}(.*?)["']{1}/i",$string,$links);
  10. for($o=0;$o<count($links[1]);$o++){
  11. if($links[1][$o] && !ereg("^(java script:|gg:|mailto:)",$links[1][$o])){
  12.  
  13. if(ereg("^?",$links[1][$o]))$links[1][$o]="http://".$url['host'].$url['path'].$links[1][$o];
  14. if(!ereg("^http://",$links[1][$o])){
  15. $links[1][$o]="http://".$url['host'].(!ereg("^/",$links[1][$o])?(!ereg("/$",$url['dir'])?$url['dir']."/":$url['dir']):(ereg("/$",$url['dir'])?substr($url['dir'],0,-1):$url['dir'])).$links[1][$o];
  16. $end['url_inside']++;
  17. }else{$end['url_outside']++;}
  18. $end[]=$links[1][$o];
  19. }
  20. }
  21.  
  22. return $end;
  23. }
  24. ?>


jako $string podajesz źródło strony, jako $from_site jej adres.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.