frankx: urlencode und "form"encode - Leerzeichen

Ahoi,

sehe ich das richtig, dass bei einem link Leerzeichen zu "%20" werden, bei einem get-Form zu "+" und beides von PHP als Leerzeichen interpretiert wird?

Gibts da noch mehr solcher Späße? Ich weiß mittlerweile (Sven erläuterte detailliert), dass im Formelement name="dies.das" von PHP zu "dies_das" konvertiert wird.

Dank und Gruß,

frankx

  1. Ahoi,

    sehe ich das richtig, dass bei einem link Leerzeichen zu "%20" werden, bei einem get-Form zu "+" und beides von PHP als Leerzeichen interpretiert wird?

    <http://de.selfhtml.org/servercgi/cgi/formularverarbeitung.htm#datenstrom@title=Sone Sauerei>

    Hotte ;-)

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. Hi,

    sehe ich das richtig, dass bei einem link Leerzeichen zu "%20" werden,

    Wenn sie dazu "werden", dann hat der Seitenautor geschlampt. Wenn in URLs solche Sonderzeichen vorkommen - dann sollten sie bereits kodiert sein, wenn sie in Links Verwendung finden.

    bei einem get-Form zu "+" und beides von PHP als Leerzeichen interpretiert wird?

    • als Kodierung eines Leerzeichen ist "historisch gewachsen"; %20 kam "später", als man sich gedacht hat, hey, wieso sollte man das beim Leerzeichen nicht auch so machen, wie bei sonst allen anderen Sonderzeichen.

    Gängige Systeme kommen mit beidem klar.

    Ich weiß mittlerweile (Sven erläuterte detailliert), dass im Formelement name="dies.das" von PHP zu "dies_das" konvertiert wird.

    Das ist wiederum eine Eigenart von PHP, da ein Variablenbezeichner keinen Punkt enthalten darf, da der schon als Verkettungsoperator Dienst tut.

    Der Client überträgt, bspw. bei grafischen input-Buttons, nach wie den Parameternamen mit Punkt drin - PHP wandelt diesen dann selber beim initialen Bereitstellen der Request-Parameter in Unterstriche um.

    Auch das ist historisch gewachsen - es war "notwendig" zu der Zeit, als register_globals=on noch gängig war, und somit aus deinem Parameternamen dies.das automatisch eine Variable $dies.das erstellt werden würde, die es aber wie gesagt in PHP nicht geben kann bzw. darf.
    Hätte man das gleich von Anfang an so umgesetzt, wie es heute üblich ist - von aussen kommende Parameter finden sich in superglobalen Arrays wieder - dann hätte man sich diesen Murks sparen können, denn einem assoziativen Array-Index könnte es eigentlich egal sein, ob er einen Punkt enthält oder nicht.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.