2.3k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo,

ich benötige Hilfe bei einem Dereferrer mit PHP. Zwar wird weitergeleitet, jedoch fehlerhaft, so dass nicht die gesamte URL korrekt ist. Also: die URL wird als "urlencode" übergeben und dann per $_GET ausgelesen und dann mit:
$link = $_GET["link"];
header("Location:".urldecode($link)."");
soll weitergeleitet werden.

Jedoch kommt es zu einem Fehler. Zum Beispiel, wenn ich auf die Seite http://www.google.de/search?num=100&hl=de&q=supportnet&btnG=Suche&meta=lr%3Dlang_de
verlinke, werde ich auf http://www.google.de/webhp?num=100 geleitet. Bei anderen Websiten ist mir aufgefallen, dass Variablen nicht korrekt verbunden werden, z.B. lang=en_GB&word1= anstatt von lang=en_GB&amp&word1=

Woran liegt das?

10 Antworten

0 Punkte
Beantwortet von katy Mitglied (787 Punkte)
lang=en_GB&word1

ist korrekt, das Semikolon gehört dahin, ansonsten ist der Code nicht valide.

katy
0 Punkte
Beantwortet von
Sorry, das war nur ein Teil des ganzen Codes, hier der Ganze.

Richtig:
index.php?lang=en_GB&amp&word1=www.example.de&amp&word2=www.example.com


Falsch (so wie mit Dereferrer weitergeleitet wird):
index.php?lang=en_GB&word1=www.example.de&word2=www.example.com
0 Punkte
Beantwortet von joshuan Mitglied (545 Punkte)
Keine Ahnung. Tu doch mal mal urldecode($link) in das HTML Dokument ausgeben und dann schau dir die Ausgabe in der Quelltextanzeige(!) im Browser an. Da müsste man eigentlich sehn was kaputt ist.

PS: hinter den Doppelpunkt von Location muss ein Leerzeichen.
0 Punkte
Beantwortet von
hinter den Doppelpunkt von Location muss ein Leerzeichen.

Nicht zwingend.

Es ist sehr merkwürdig. Wenn ich mir $link per echo ausgeben lasse, zeigt der Browser:
index.php?lang=en_GB&word1=www.example.de&word2=www.example.com


Im Quelltext steht jedoch:
index.php?lang=en_GB&word1=www.example.de&word2=www.example.com
0 Punkte
Beantwortet von
Möglicherweise könnte ein Hiddenfield helfen? Ich probiers mal...
0 Punkte
Beantwortet von
Ne, leider nicht.
0 Punkte
Beantwortet von joshuan Mitglied (545 Punkte)
Es gibt bestimmt schlecht programmierte Clients die das Leerzeichen erwarten. zb viele von meine Skripte. LOL
Vergiss was der Browser anzeigen tut. Der interpretiert HTML. Das ist sein Job. Hat mit deinem Prob nix zum tun.
0 Punkte
Beantwortet von joshuan Mitglied (545 Punkte)
Was ist denn mit dem ersten Beispiel wo es schon am ersten Kaufmann UND scheitert?
0 Punkte
Beantwortet von katy Mitglied (787 Punkte)
Es ist sehr merkwürdig. Wenn ich mir $link per echo ausgeben lasse, zeigt der Browser:
index.php?lang=en_GB&word1=www.example.de&word2=www.example.com

Im Quelltext steht jedoch:
index.php?lang=en_GB&word1=www.example.de&word2=www.example.com
das ist nicht im geringsten merkwürdig, sondern genau so muss der Browser das anzeigen. & ist die Bezeichnung für ein &, das so nicht im HTML-Quelltext allein stehen darf, weil es ein HTML-Sonderzeichen ist. Mit anderen Worten: überall wo der Browser ein & anzeigen soll muss im Quelltext & stehen. PHP-Funktionen wie htmlspecialcharacters machen nichts anderes als HTML-Sonderzeichen so zu maskieren.

katy
0 Punkte
Beantwortet von joshuan Mitglied (545 Punkte)
Was meinst du mit hidden fields? Kenn ich nur im Formular. Forms sind im Body nicht bei den Headers wie Location. Das Lesen vom HTTP Body nach Location Header ist auch nich zwingend. ;-) Natürlich kannst du ohne Location Header eine Form mit autosubmitt machen aber das geht nur mit Javascript.

Aber konzentrier dich mal auf dein Prob. Das muss lösbar sein. Glaub mir. Hör auf zum raten und theoretisieren. Lass dir Werte ausgeben. Programmieren is nich wie Schachspielen wo man beim denken die Figuren nich anfassen darf. ;-)
...