POST name mit "." geht nicht?

ayk

Ensign
Registriert
Apr. 2004
Beiträge
163
Hi,

was mir heute Morgen aufgefallen ist, dass wenn ich ein Formular habe, der nen Button beinhaltet, in dessen name Attribut ein Punkt vorkommt, wird dieser durch einen _ ersetzt. Habs sowohl mit nem eigenen Formular, als auch mit curl getestet.

Kann mir einer erklären warum?


Formular
HTML:
<form action="index.php" method="POST">
<input type="submit" name="hallo.welt" value="rund">
</form>

index.php
PHP:
<? print_r($_POST);  ?>

curl
Code:
curl.exe -d "hallo.welt=rund"

Ausgabe
PHP:
[hallo_welt] => rund
 
benutz lieber hallo[welt] als name, da kannst du dies in php über normale arrays ansprechen, sprich $_REQUEST['hallo']['welt'].
 
Vielen Dank erstmal für die Antwort,

allerdings habe ich die Frage aus reiner Neugier gestellt, es geht nicht um mein Projekt.
 
vielleicht liegt es ja an der konfiguration selbst? wenn ich ein array mit einem . im namen manuell erstelle bleibt es erhalten. vielleicht ist das aber auch nur das "standardvorgehen" von html. wüsste jetzt nicht was es konkret ist, sind nur 2 einfälle.
 
Ich vermute, dass der Browser es automatisch umwandelt, da es sonst in einigen Skriptsprachen zu Problemen kommen würde - es gibt schließlich nicht nur PHP.

Nimm bspw. JavaScript. Dort kann man Formularelemente folgendermaßen ansprechen:
document.forms[0].Elementname
Wenn nun Elementname einen Punkt enthalten würde, sähe das ganze so aus:
document.forms[0].hallo.welt
Das wäre vollkommener Blödsinn, da man dann auf die Eigenschaft welt des Elements hallo zugreifen wollen würde.
 
Das hat weder etwas mit HTML oder mit irgendwelchen Browsern zu tun. Das liegt einzig und allein an PHP. Das Verhalten ist sicherlich irgendwo dokumentiert. Evtl ist es auch irgendwie möglich mit PHP an die reinen Post-Daten zu kommen. Punkte in einem Namen(außer am Anfang) sind in HTML explizit erlaubt.
 
Zuletzt bearbeitet:
rtfm:
Dots in incoming variable names

Typically, PHP does not alter the names of variables when they are passed into a script. However, it should be noted that the dot (period, full stop) is not a valid character in a PHP variable name. For the reason, look at it:
<?php
$varname.ext; /* invalid variable name */
?>
Now, what the parser sees is a variable named $varname, followed by the string concatenation operator, followed by the barestring (i.e. unquoted string which doesn't match any known key or reserved words) 'ext'. Obviously, this doesn't have the intended result.

For this reason, it is important to note that PHP will automatically replace any dots in incoming variable names with underscores.

überbleibsel von register_globals=on
 
Zurück
Oben