Newsgroup: it.comp.www.php
Titolo: Ricavare link da url

Salve,
avrei bisogno di tirar fuori data una determinata url il link che e\'
stato cliccato per arrivarci (ovviemente in php, ma se avete consigli su
altri linguaggi, benvengano)
ad esempio, dato ada.txt e la seguente stringa
<img alt=\"ada.txt\" src=img.gif>adsada<a son=\"ddd\" href=ada.txt\"><img
src=\"pippo.gif\"></a>
dovrei riuscire a tirar fuori <img src=\"pippo.gif\">
in pratica dato ada.txt devo trovare quel che sta fra <a> e </a>
il grosso problema sta proprio nel fatto che la parola ada.txt si puo\'
trovare anche prima o dopo di un href (ad esempio come alt di un img o
qualunque altra cosa)
Sapete consigliarmi un metodo decente? Sto impazzendo nel gestire le varie
eccezioni, se ci fosse una funzione adatta o una regexp...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 eccezioni, se ci fosse una funzione adatta o una regexp...
semplice come bere un bicchier d'acqua... solo se sei in linux come srv

 in pratica dato ada.txt devo trovare quel che sta fra <a> e </a>
Dipende cosa hai a disposizione. In PHP5 potresti usare qualcosa tipo
$dom = new DomDocument()
$dom->loadHTML($stringaHTML);
$res = array();
foreach ($dom->getElementsByTagName("a") as $a) {
  if ($a->getAttribute("href") == "ada.txt"
	&& $a->firstChild()->tagName == "img") {
    $res[] = $a->firstChild->getAttribute("src");
  }
}
In $res ti trovi un array con tutti i src delle immagini che cerchi.
Andrebbe un po' affinato per controllare che esista un firstChild di $a,
per esempio, ma era per semplificare il procedimento.
Bye.

 In $res ti trovi un array con tutti i src delle immagini che cerchi.
Ok, grazie intanto per la prontissima risposta:
procedere per elementi html piuttosto che per stringhe mi sembra possa
essere una buona soluzione.
il fatto e\' che io non so se mi ritrovero\' un\'immagine o un testo o
qualunque altra cosa.
potrei avere
<a son=\\\"ddd\\\" href=ada.txt\\\">CIAO</a>
e dover estrarre appunto quel CIAO.
Any suggestion?
Grazie davvero ancora per l\'aiuto...


 Grazie davvero ancora per l\'aiuto...
HAI WIN O LINUX?

 HAI WIN O LINUX?
Ho volendo sia delle macchine win che unix.


 Ho volendo sia delle macchine win che unix.
allora e' semplice basta che giochi un po con awk, cat e compagnia bella

 Any suggestion?
Stessa procedura. Quando hai il firstChild di $a puoi trattarlo come vuoi.
Puo` essere un HTMLElement o un TextElement.
Leggi il manuale di PHP: 
http://it2.php.net/manual/en/ref.dom.php
Usare awk, come dice SyNko, e` un'alternativa, ma visto che stai lavorando
sul DOM o comunque su un linguaggio XML-like e' sicuramente piu` semplice
farlo in PHP.
Un ultimo consiglio: cambia modo di postare sul newsgroup, perche` ti sta
facendo l'espace di tutte le virgolette che scrivi, e si fa fatica a
capire.
Bye.

 farlo in PHP.
concordo, come ultima spiaggia tieni presente che puoi anche interagire
con i facili comandi shell di *nix

 
usando le regexp..
$str = preg_quote('ada.txt');
preg_match_all(
"/<a (.* )?href=('.*$str.*'|\".*$str.*\"|.*$str.*).*>(.*?)<\/a>/"
, $text, $matches);
print_r($matches[3]);
generalmente puo' funzionare..
-- 
www.iuz-lab.info

 generalmente puň funzionare..
Grazie a tutti intanto per gli ottimi suggerimenti.
Lunedi mattina mi rimetterň sotto a impazzire e vi terrň aggiornati :)
Buona finesettimana a voi.


Rieccomi:
To Alessandro Pellizzari:
caricando in $stringaHTML la seguente stringa:
<a href=hdcffct.htm>link1</a><a href=link2.htm><img
src=winxp.gif></a><link href=link2.htm/>link3<a href=link3.htm>link3</a>
e poi echando $res[0] in finale mi ritorna questo errore
Parse error: parse error, unexpected T_VARIABLE in
C:\\PHP\\ricorsivo\\regexp.php on line 4
(sto usando php5 eh)
To iuz:
caricando in $stringaHTML la seguente stringa (la stessa di sopra comunque
:)
<a href=hdcffct.htm>link1</a><a href=link2.htm><img
src=winxp.gif></a><link href=link2.htm/>link3<a href=link3.htm>link3</a>
con la tua regexp mi ritorna link3 invece che <img src=winxp.gif>
Sapete darmi una mano?? Sto impazzendo!!!


secondo me il tag chiave e' </a>, in quanto a te servono cosa sta fra
<a ..>   e </a> che siano delle lettere o un immagine.
i comandi linux sono piu' o meno questi:
cat nomefile | awk '{split($0,variabile,"</a>"); print variabile[1];
print variabile[2]; print .... }'
e ti trovi con l'output formato da frammenti fatti spezzando dove
trovava ogni </a> e creando una riga per frammento.
poi metti un check dove se l'ultimo carattere della riga e' uno spazio
guarda il successivo fino a quando o trova una lettera o trova un tag >
nel caso in cui  sia un immagine.
se e' una parola splitti ancora tutto sul simbolo > e ti metti a
prendere l'ultima variabile/array
se e' un immagine allora splitti sempre sul simbolo > ma ti metti a
prendere la penultima aggiungendo poi alla stringa che ne ricavi un >
che hai appena tolto.
porti in variabile php facendo tipo:
$obbiettivo=$(cat nomefile | awk '{split($0,variabile,"</a>"); print
variabile[1]; print variabile[2]; print .... }');
fai la sintassi che la logica c'e', se ero motivato ci stavo io sopra a
sclerare, mi sa che tocca a te...
questo metodo e' sicuramente piu' semplice dei vari reg exp e funzioni
php.
ciao

 (sto usando php5 eh)
Ehm... bisognerebbe vedere il codice e cosa c'e` alla linea 4.
Messo cosi` sembra tu abbia messo una variabile quando lui si aspettava un
comando.
Bye.