Den som löser detta är rejält duktig på sina saker...!
Jag har ett litet cgi-script som räknar antal click och som förväntar sig en URL, för att kunna redirecta omedelbart efter clickräkningen, enligt följande påhittade exempel.
CGI-scriptet fungerar utmärkt.
Ibland måste jag dock ersätta exempelvis "&" med %26, ";" med %3b och "+" med %2b, för att få redirect att fungera korrekt.
Men det är OK.
Tills jag har en alltför "avancerad" URL som inparameter till CGI-scriptet.
Problemet verkar vara att ett av "värdena" i http-harangen innehåller ett "&"-tecken, som SKALL vara just TECKNET "&" och INTE specificera att det är någon slags "kod" på gång, som i andra fall (i ex.vis "?what=map%26mop=xx" har %26 ersatt ett "kod-&").
Troligen är det alltså "&" i "Pelle's%2bStrul%2b%26%2bProblem" som måste fixas till, på något vis.
Jag fattar dock inte hur jag skall kunna kringgå detta...
TACKSAM för hjälp!
Som sagt; den som löser detta är rejält duktig på sina saker...!
Jo, att & måste kodas (när man separerar parametrar) är jag med på, MEN i just detta fall finns det ett &-tecken i själva "texten", som INTE betyder "parameter-&".
Pelle's%2bStrul%2b%26%2bProblem
skall alltså egentligen vara
Pelle's+Strul+&+Problem
där & är ett &-tecken (en del av namnet "Pelle's Strul & Problem") och ingen parameterinledning.
Mottagarsidan (inte min...) MÅSTE få EXAKT "Pelle's+Strul+&+Problem" till sig, för att fungera.
Jag har även provat med att skicka
Pelle's%2bStrul%2b&%2bProblem (& som det är)
Pelle's%2bStrul%2b%%26%2bProblem (ett extra % före %26)
Pelle's%2bStrul%2b%25%26%2bProblem (ett %25 (="%") före %26)
men det går inte heller.
"Pelle's%2bStrul%2b%26%2bProblem" är exakt "Pelle's+Strul+&+Problem" skickat via http-GET tar du emot det via CGI.pm så blir det rätt... Jag förstår inte var problemet är.
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $q = new CGI;
if ( my $query = $ENV{'QUERY_STRING'} ) {
$query =~ s/url=//i;
$query =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
print $q->redirect($query);
}
else {
print $q->redirect('http://www.google.com/');
}
jämfört med att BARA skjuta http://www.gulasidorna.se/query?what=map&mop=xx&mapcomp=RSID_10888161;584745;Victoria's+Sol+%26+Sk%F6nhet;Marklandsg.+;7;;41477;G%D6TEBORG;031;41+00+77;1269142;6400864;0;0&mapstate=7;1269142;6400864;0;0;0;0;0;
i en browser.
Viss information (adress mm) tappas, eller hur!?
Detta BORDE ju inte vara alls svårt, eller...!?
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $q = new CGI;
if ( my $query = $ENV{'QUERY_STRING'} ) {
$query =~ s/url=//i;
print $q->redirect($query);
}
else {
print $q->redirect('http://www.google.com/');
}
Jag tror att det bästa vore om man kunde angripa problemet i "botten".
Problemet är ju att länken till Gula Sidorna innehåller ett & som inte skall avkodas som annat än & och inte inledningen till en parameter.
Finns det beskrivet någonstans (specifikation) att "& inte får användas" i dessa sammanhang?
Eller står det snarare någonstans hur man kommer runt problemet?
Ungefär som när man måste skriva dubbla \\ för att få ett \ i andra sammanhang.
Den som löser detta är KUNGARNAS KUNG - på CGI, i alla fall...!
:-)
det som hamnar i miljödataarean (fin svensk omskrivning) $ENV{'QUERY_STRING'} är exakt den query-string som webbläsaren skickar vid förfrågan. Anropar du;
JA! Det fungerar!
Jag glömde (den andra gången) att sätta .pl-filen till executable...
Mitt PUCKO!
TACK!
Återstår bara att du förklarar, om du vill, ditt lilla script!?
1. Hur kan du fråga om $query är lika med något, innan $query HAR något värde?
Det sätts ju inte första gången förrän I if-satsen, EFTER att statementet testas, eller...!?
2. Vad betyder $ENV{'QUERY_STRING'}?
3. Vad innebär tilldelningen =~ s/url=//i;?
if ( my $query = $ENV{'QUERY_STRING'} ) {
$query =~ s/url=//i;
print $q->redirect($query);