Hi,
oh man, hier sind wieder ein paar "use CGI"-Junkies unterwegs, die deinen folgenden Text nicht gelesen haben :)
und zwar habe ich eine url in einer text datenbank. von dieser url will ich ein query-string auslesen. das funktioniert auch soweit, jedoch nicht bei dem ersten string der direkt hinter dem "?" kommt. das ausgelesen funktioniert nur nach dem ersten "&".
?q=keyword& # wird nicht ausgelesen
&q=keyword& # wird ausgelesenBespiel:
$Dateiname = "search?q=keyword1 keyword2&ie=UTF-8&oe=UTF-8&hl=de&btnG=Google Suche&meta="
Dumme Zwischenfrage: Welches Programm speichert denn diese URLs ab?
Sollte man nicht schon da ansetzen?
Wie auch immer...
Du hast also einfach einen String der Form:
URI?parameter
Wobei parameter durch & getrennt werden.
Ausserdem scheint es ggf. zu Fehlern beim Abspeichern zu kommen, wo naemlich im dem ehemaligen Querystring Leerzeichen eingebuttert wurden :(
Ob du diese Leerzeichen korrigierst, indem du diese durch ein "+" ersetzt, ist abhängig davon, was du später mit den daten machen willst..
Also machen wir es einfach:
my ($uri, $params) = split(/?/,$Dateiname);
if (not $params) {
# Keine Parameter da :)
} else {
@wertepaare = split(/&/,$params);
}
Dann weiter wie bisher:
open (LOG, >>keywords.dat");
Einmal oeffnen reicht.
foreach $wertepaar (@wertepaare)
{($name, $value) = split(/=/, $wertepaar);
$name =~ tr/+/ /;
Brauchen wir ggf. nicht.
Wie gesagt: Was willst du mit den Daten anfangen?
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
Siehe oben
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/|/%7C/g;
$value =~ s/~!/ ~!/g;
if ("$name" eq "q") {
open (LOG, >>keywords.dat");
print LOG "$value\n";
close (LOG);
}
ich vermute eher du wolltest dies tun:
print LOG "$value\n" if ($value);
}
close LOG;
Ciao,
Wolfgang