xwolf: problem mit auslesen des query-string nach "?"

Beitrag lesen

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 ausgelesen

Bespiel:

$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