Ich habe ein PHP-Skript, das <input>
s dynamisch generiert , daher habe ich mich gefragt, ob ich Zeichen im name
Attribut filtern muss .
Ich weiß, dass der Name mit einem Buchstaben beginnen muss, aber ich kenne keine anderen Regeln. Ich denke, eckige Klammern müssen erlaubt sein, da PHP diese verwendet, um Arrays aus Formulardaten zu erstellen. Wie wäre es mit Klammern? Räume?
name
also ein anderer Datentyp für<input>
als für andere Elemente? Interessant.<a>
und die meisten Elemente, aber anders als<meta>
<input>
mit allen Arten von Mist imname
Attribut, und es in HTML 4.01 Strict validiert. Akzeptiert!Beachten Sie, dass nicht alle Zeichen für
name
Attribute von Formularfeldern gesendet werden (auch bei Verwendung von POST)!Leerzeichen werden abgeschnitten und innere Leerzeichen sowie das Zeichen
.
werden durch ersetzt_
. (Getestet in Chrome 23, Firefox 13 und Internet Explorer 9, alle Win7.)quelle
first[second]
stattfirst.second
.Jedes Zeichen, das Sie in eine [X] HTML-Datei aufnehmen können, kann problemlos in eine eingefügt werden
<input name>
. Wie Allains Kommentar sagt,<input name>
wird er als enthaltend definiert.CDATA
Das einzige, was Sie dort nicht eingeben können, sind die Steuercodes und ungültigen Codepunkte, die der zugrunde liegende Standard (SGML oder XML) nicht zulässt.Allain zitierte W3 aus der HTML4-Spezifikation:
In der Praxis trifft dies jedoch nicht wirklich zu.
Die Theorie besagt, dass
application/x-www-form-urlencoded
Daten keinen Mechanismus zum Angeben einer Codierung für die Namen oder Werte des Formulars haben. Daher wird die Verwendung von Nicht-ASCII-Zeichen in beiden nicht als funktionierend angegeben, und Sie solltenmultipart/form-data
stattdessen POSTed verwenden.Leider gibt in der realen Welt kein Browser eine Codierung für Felder an, selbst wenn dies theoretisch möglich wäre, und zwar in den Unterteil-Headern eines
multipart/form-data
POST-Anforderungshauptteils. (Ich glaube, Mozilla hat einmal versucht, es zu implementieren, hat sich jedoch zurückgezogen, da es Server kaputt gemacht hat.)Und kein Browser implementiert den erstaunlich komplexen und hässlichen RFC2231- Standard, der erforderlich wäre, um codierte Nicht-ASCII-Feldnamen in die Subpart-Header des Multiparts einzufügen. In jedem Fall
multipart/form-data
besagt die definierte HTML-Spezifikation nicht direkt, dass RFC2231 verwendet werden sollte, und es würde wiederum Server beschädigen, wenn Sie es versuchen würden.Die Realität sieht also so aus, dass es keine Möglichkeit gibt zu wissen, welche Codierung für die Namen und Werte in einer Formularübermittlung verwendet wird, unabhängig davon, um welche Art von Formular es sich handelt. Was Browser mit Feldnamen und Werten tun, die Nicht-ASCII-Zeichen enthalten, ist für GET und beide Arten von POST-Formularen gleich: Sie codieren sie mithilfe der Codierung der Seite, die das verwendete Formular enthält. Nicht-ASCII-GET-Formularnamen sind nicht fehlerhafter als alles andere.
DLH:
Eigentlich ist das einzige Element, dessen
name
Attribut nichtCDATA
ist<meta>
,. In der Attributliste der HTML4-Spezifikation finden Sie alle Verwendungsmöglichkeiten vonname
; Es ist ein überladener Attributname, der viele verschiedene Bedeutungen für die verschiedenen Elemente hat. Dies wird allgemein als eine schlechte Sache angesehen.Normalerweise vermeiden Sie dies heutzutage jedoch,
name
außer in Formularfeldern (wo es sich um einen Steuerelementnamen handelt) undparam
(wo es sich um eine Plugin-spezifische Parameter-ID handelt). Das sind nur zwei Bedeutungen, mit denen man sich auseinandersetzen muss. Die Verwendung vonname
Elementen wie<form>
oder<a>
auf der Seite in der alten Schule sollte vermieden werden (id
stattdessen verwenden).quelle
Während Allains Kommentar die direkte Frage von OP beantwortete und Bobince einige brillante, detaillierte Informationen lieferte, glaube ich, dass viele Leute hierher kommen, um eine Antwort auf eine spezifischere Frage zu suchen: "Kann ich ein Punktzeichen im Attribut für den Eingabenamen des Formulars verwenden?"
Als dieser Thread als erstes Ergebnis auftauchte, als ich nach diesem Wissen suchte, vermutete ich, dass ich genauso gut teilen kann, was ich gefunden habe.
Erstens behauptete Matthias ':
Das ist falsch. Ich weiß nicht, ob Browser diese Art von Operation bereits 2013 durchgeführt haben - aber ich bezweifle das. Browser senden Punktzeichen so wie sie sind (über POST-Daten)! Sie können es in den Entwicklertools jedes anständigen Browsers überprüfen.
Bitte beachten Sie diesen winzigen kleinen Kommentar von abluejelly, der wahrscheinlich von vielen übersehen wird:
Ich habe es mit dem Apache HTTP Server (v2.4.25) überprüft und tatsächlich wurde der Eingabename wie "foo.bar" in "foo_bar" geändert. Aber in einem Namen wie "foo [foo.bar]" wird dieser Punkt nicht durch _ ersetzt!
Mein Fazit: Sie können Punkte verwenden, aber ich würde es nicht verwenden, da dies je nach verwendetem HTTP-Server zu unerwarteten Verhaltensweisen führen kann .
quelle
Meinen Sie die ID- und Namensattribute des HTML-Eingabe-Tags?
Wenn ja, wäre ich sehr versucht, erlaubte "Eingabe" -Namenszeichen in nur az (AZ), 0-9 und einen begrenzten Satzzeichenbereich (".", "," Usw.) einzuschränken (oder umzuwandeln). wenn auch nur, um das Potenzial für XSS-Exploits usw. zu begrenzen.
Warum sollte der Benutzer außerdem einen Aspekt des Eingabe-Tags steuern lassen? (Könnte es aus Validierungssicht letztendlich nicht einfacher sein, die Namen der Eingabe-Tags "custom_1", "custom_2" usw. beizubehalten und diese dann nach Bedarf zuzuordnen.)
quelle