を<input>
動的に生成するPHPスクリプトがあるので、name
属性内の文字をフィルタリングする必要があるかどうか疑問に思いました。
名前は文字で始まる必要があることは知っていますが、他のルールはわかりません。PHPは角かっこを使用してフォームデータから配列を作成するため、角かっこは許可する必要があると思います。括弧はどうですか?スペース?
回答:
<a>
ほとんどの要素と同じですが、異なります<meta>
<input>
name
属性にあらゆる種類のがらくたを入れて HTML 4.01Strictで検証されました。受け入れました!
name
フォームフィールドの属性に対してすべての文字が送信されるわけではないことに注意してください(POSTを使用している場合でも)。
空白文字はトリミングされ、内側の空白文字も文字.
が_
。に置き換えられます。(Chrome 23、Firefox 13、Internet Explorer 9、すべてWin7でテスト済み。)
first[second]
代わりにfirst.second
。
[X] HTMLファイルに含めることができる文字は、<input name>
。に入れても問題ありません。Allainのコメントが言うように、<input name>
含むと定義されていますCDATA
ように、ものので、そこに入れることができないのは、基礎となる標準(SGMLまたはXML)で許可されていない制御コードと無効なコードポイントだけです。
AllainはHTML4仕様からW3を引用しました:
注意。「get」メソッドは、フォームデータセットの値をASCII文字に制限します。ISO10646文字セット全体をカバーするために、「post」メソッド(enctype = "multipart / form-data"を使用)のみが指定されています。
ただし、これは実際には実際には当てはまりません。
理論では、application/x-www-form-urlencoded
データにはフォームの名前または値のエンコーディングを指定するメカニズムがないため、どちらかで非ASCII文字を使用することは機能するものとして「指定されていない」ため、multipart/form-data
代わりにPOSTを使用する必要があります。
残念ながら、現実の世界では、multipart/form-data
POSTリクエスト本文のサブパートヘッダーで、理論的に可能な場合でも、フィールドのエンコーディングを指定するブラウザはありません。(Mozillaは一度実装しようとしましたが、サーバーが壊れたために取り消されたと思います。)
また、エンコードされた非ASCIIフィールド名をマルチパートのサブパートヘッダーに挿入するために必要な、驚くほど複雑で醜いRFC2231標準を実装しているブラウザはありません。いずれにせよ、定義するHTML仕様multipart/form-data
は、RFC2231を使用する必要があることを直接示していません。また、試行するとサーバーが破損します。
したがって、実際の状況では、フォームの種類に関係なく、フォーム送信の名前と値にどのエンコーディングが使用されているかを知る方法はありません。非ASCII文字を含むフィールド名と値でブラウザが行うことは、GETと両方のタイプのPOSTフォームで同じです。使用されるフォームを含むページのエンコーディングを使用してそれらをエンコードします。非ASCIIGETフォーム名は、他のすべてのものよりも壊れることはありません。
DLH:
では、名前のデータ型は他の要素のデータ型とは異なりますか?
実際には、name
属性がではない唯一の要素CDATA
は<meta>
です。;のさまざまな使用法については、HTML4仕様の属性リストを参照してくださいname
。これはオーバーロードされた属性名であり、さまざまな要素でさまざまな意味を持っています。これは一般的に悪いことと考えられています。
ただし、最近では通常name
、フォームフィールド(コントロール名の場合)とparam
(プラグイン固有のパラメーター識別子の場合)を除いて、回避します。それは取り組むべき2つの意味だけです。ページのname
ような<form>
または<a>
ページ上の要素を識別するための昔ながらの使用は避ける必要があります(id
代わりに使用してください)。
AllainのコメントはOPの直接の質問に答え、bobinceはいくつかの素晴らしい詳細情報を提供しましたが、「フォームの入力名属性にドット文字を使用できますか?」というより具体的な質問への回答を求めて多くの人がここに来ると思います。
この知識を検索したときに最初の結果としてこのスレッドが表示されたので、私が見つけたものを共有したほうがよいと思いました。
まず、マティアスは次のように主張しました。
キャラクター 。_に置き換えられます
これは真実ではありません。2013年にブラウザが実際にこの種の操作を行ったかどうかはわかりませんが、それは疑わしいです。ブラウザはドット文字をそのまま送信します(POSTデータについて話します)!あなたはそれをまともなブラウザの開発者ツールでチェックすることができます。
abluejellyによる小さなコメントに注意してください。おそらく多くの人が見逃しているでしょう。
これはサーバー固有のものであり、ブラウザーのものではないことに注意してください。Win7 FF3 / 3.5 / 31、IE5 / 7/8/9/10 / Edge、Chrome39、およびSafari Windows 5でテストされ、それらすべてがPOSTの名前として「testthis.stuff」(先頭に4つのスペース)を送信しました。 VS2012にバンドルされているASP.NET開発サーバー。
Apache HTTPサーバー(v2.4.25)で確認したところ、実際に「foo.bar」のような入力名が「foo_bar」に変更されています。しかし、「foo [foo.bar]」のような名前では、そのドットは_に置き換えられません!
私の結論:ドットは使用できますが、使用するHTTPサーバーによっては予期しない動作が発生する可能性があるため、使用しません。
HTML入力タグのid属性とname属性を意味しますか?
もしそうなら、私は許可された「入力」名文字をaz(AZ)、0-9および限られた範囲の句読点( "。"、 "、"など)のみに制限(または変換)したいと思うでしょう。 XSSエクスプロイトなどの可能性を制限するためだけの場合。
さらに、なぜユーザーが入力タグの任意の側面を制御できるようにするのですか?(検証の観点から、入力タグ名を「custom_1」、「custom_2」などに保ち、必要に応じてこれらをマップすることは、最終的には簡単ではないかもしれません。)
name
異なるデータ型が<input>
ありますか?面白い。