perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 12:24

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragRelative durch absolute URLs ersetzen
Seitenanfang
Hallo!

Folgendes Problem: In einem gegebenen HTML-Quelltext moechte ich alle relativen durch absolute Hyperlinks (a href="..." und img src="...") ersetzen.

Dazu gehe ich bisher folgendermassen vor:


# start, nur das wichtigste
use HTML::LinkExtor;
my $oLX = HTML::LinkExtor->new(\&cb);
$oLX->parse($html_quelltext);

my @links = ();
sub cb {
my($tag, %attr) = @_;
push(@links, values %attr);
}

for (@links) {
$neue_url = url$_, $baseURI)->abs;
$html_quelltext =~ s/$_/$neue_url/g;
}

# ende

Das funktioniert bisher auch wirklich gut. Einziges Problem: Links der Form

/ein/paar/pfade/datei.html?param1=val1¶m2=some/stuff+and/more

werden zwar vom LinkExtor korrekt als Links erkannt und befinden sich auch im Array "links"; sie werden aber durch den Substitutionsoperator NICHT ersetzt!

Was mache ich falsch?
Danke und Gruss.

Datum: 02.08.2005-17:08

Beitragre: Relative durch absolute URLs ersetzen
Seitenanfang
in der docu zu HTML::LinkExtor ist ein Beispiel drinnen wie relative urls zu absoluten umgewandelt werden:


use LWP::UserAgent;
use HTML::LinkExtor;
use URI::URL;

$url = "http://www.perl.org/"; # for instance
$ua = LWP::UserAgent->new;

# Set up a callback that collect image links
my @imgs = ();
sub callback {
my($tag, %attr) = @_;
return if $tag ne 'img'; # we only look closer at <img ...>
push(@imgs, values %attr);
}

# Make the parser. Unfortunately, we don't know the base yet
# (it might be diffent from $url)
$p = HTML::LinkExtor->new(\&callback);

# Request document and parse it as it arrives
$res = $ua->request(HTTP::Request->new(GET => $url),
sub {$p->parse($_[0])});

# Expand all image URLs to absolute ones
my $base = $res->base;
@imgs = map { $_ = url($_, $base)->abs; } @imgs;

# Print them out
print join("\n", @imgs), "\n";

du brauchst dann nur die relativen duch die absoluten zu ersetzen

Datum: 04.08.2005-14:16

-






-
-