Maik W. aus E: URL-Kodierung vs. Link-Kodierung: Parameter-Probleme

Tach zusammen,

Ich bastle gerade an einem Donloadscript, das ich beispielhaft mit folgendem Aufruf starte:

<a href="download.php?dl=pfad/datei.ext&#35;parameter=&quot;Wert&quot;"

Das klappt auf diesem direkten Weg auch gut, allerdings binde ich noch ein Login-script ein, bei dem ich den unrsprünglichen Aufruf per

<a href='".$_SERVER['REQUEST_URI']."'>

durchreiche. Hier wird aber in dieser Form dann vor dem '#' abgeschnitten.

Das Problem kriege ich auch in den Griff, in dem ich das '#' durch '%23' kodiere.
Schon klappt's auch mit dem Aufruf der URI mit <a href='".$_SERVER['REQUEST_URI']."'>

Allerdings geht der direkte Ursprungs-Link nicht mehr, denn die aufgerufene Datei heißt jetzt
pfad/datei.ext#parameter="wert",
und die "escapeten" Anführungszeichen lassen die weitere Verarbeitung scheitern.

Was muß ich wie kodieren, damit die Anführungszeichen am Ende "pur da stehen?

Schönen Dank schon mal und
http://www.gruss-aus-essen.de

Maik

--
--
Diese Dauerleihgabe wird Ihnen präsentiert von ROMY!
Maik. W. aus E. sagt Dankeschön ;-)
  1. echo $begrüßung;

    <a href='".$_SERVER['REQUEST_URI']."'>
    Hier wird aber in dieser Form dann vor dem '#' abgeschnitten.

    Wann passiert das? Schon im HTML-Code oder erst beim Request? Angaben hinter dem Anker sind allein für den Browser interessant. Diese sendet er _nicht_ als Bestandteil des Requests an den Server.

    Allerdings geht der direkte Ursprungs-Link nicht mehr, denn die aufgerufene Datei heißt jetzt
    pfad/datei.ext#parameter="wert",
    und die "escapeten" Anführungszeichen lassen die weitere Verarbeitung scheitern.

    Wenn du sie nicht maskiert hast, dann war das sicher das !herrliche Feature Magic Quotes. Deaktiviere es oder beseitige seine Auswirkungen. Hier sieht man mal wieder seine negativen Eigenschaften, da es generell auf alle Eingabedaten wirkt und nicht nur auf die Ausgabedaten für SQL-Querys.

    Was muß ich wie kodieren, damit die Anführungszeichen am Ende "pur da stehen?

    Kurze Antwort: Kontextgerecht.

    Lange Antwort: Du hast Daten vorliegen, die du in einen URL-Kontext einfügen möchtest. Da du sie im Querystring einfügen möchtest, ist die Funktion urlencode() eine gute Wahl. Anschließend soll diese URL in einem HTML-Kontext zu stehen kommen, also wird da auch noch htmlspecialchars() benötigt.

    echo "$verabschiedung $name";

    1. Tach auch dedlfix,

      <a href='".$_SERVER['REQUEST_URI']."'>
      Hier wird aber in dieser Form dann vor dem '#' abgeschnitten.
      Wann passiert das? Schon im HTML-Code oder erst beim Request?

      Erst beim Request.

      Angaben hinter dem Anker sind allein für den Browser interessant. Diese sendet er _nicht_ als Bestandteil des Requests an den Server.

      Deswegen die Kodierung...

      Allerdings geht der direkte Ursprungs-Link nicht mehr, denn die aufgerufene Datei heißt jetzt
      pfad/datei.ext#parameter="wert",
      und die "escapeten" Anführungszeichen lassen die weitere Verarbeitung scheitern.

      Wenn du sie nicht maskiert hast, dann war das sicher das !herrliche Feature Magic Quotes. Deaktiviere es oder beseitige seine Auswirkungen. Hier sieht man mal wieder seine negativen Eigenschaften, da es generell auf alle Eingabedaten wirkt und nicht nur auf die Ausgabedaten für SQL-Querys.

      Tss..., tatsächlich, das war noch angeschaltet! Das ist mir doch glatt durchgegangen bei der Konfig. Es funktioniert übrigens prompt, wenn man es abschaltet.

      Was muß ich wie kodieren, damit die Anführungszeichen am Ende "pur da stehen?

      Kurze Antwort: Kontextgerecht.

      Lange Antwort: Du hast Daten vorliegen, die du in einen URL-Kontext einfügen möchtest. Da du sie im Querystring einfügen möchtest, ist die Funktion urlencode() eine gute Wahl. Anschließend soll diese URL in einem HTML-Kontext zu stehen kommen, also wird da auch noch htmlspecialchars() benötigt.

      Danke für Deine Hinweise, so funktioniert es auch auf dem Produktivsystem mit eingeschaltetem magic_quotes, auf dessen Konfig ich keinen Einfluß habe.

      http://www.gruss-aus-essen.de

      Maik

      --
      Diese Dauerleihgabe wird Ihnen präsentiert von ROMY!
      Maik. W. aus E. sagt Dankeschön ;-)
      1. Danke für Deine Hinweise, so funktioniert es auch auf dem Produktivsystem mit eingeschaltetem magic_quotes, auf dessen Konfig ich keinen Einfluß habe.

        Wie es im Moment bei dir funktioniert kann ich mir so nur schwer vorstellen.
        Aber generell sei mal der Hinweis gebracht, dass du "#" garnicht in der URL verwenden darfst/solltest. Wie gesagt, ist alles nach dem "#" ein Anker und hat nur den Browser zu interessieren. Eine Parameterübergabe wie du sie beschreibst macht man normal mit dem Trennzeichen "?".

        Wenn du das "#" gültig in einen Link bekommen willst, musst es mit urlencode codieren, nicht mit einem HTML Entity, denn das sollte der Browser wie ein normales "#" behandeln.

        1. Tach auch ?,

          Aber generell sei mal der Hinweis gebracht, dass du "#" garnicht in der URL verwenden darfst/solltest. Wie gesagt, ist alles nach dem "#" ein Anker und hat nur den Browser zu interessieren. Eine Parameterübergabe wie du sie beschreibst macht man normal mit dem Trennzeichen "?".

          Ich weiß. Ich würde mir das auch freiwillig nicht geben wollen, allerdings basteln die Jungs von Adobe da ihre ganz eigene Syntax zusammen.

          Wenn du das "#" gültig in einen Link bekommen willst, musst es mit urlencode codieren, nicht mit einem HTML Entity,

          Ja und? Das schrieb dedlfix doch, und darauf bezog ich mich.

          http://www.gruss-aus-essen.de

          Maik

          --
          Diese Dauerleihgabe wird Ihnen präsentiert von ROMY!
          Maik. W. aus E. sagt Dankeschön ;-)