inputタグ内のHTMLName属性で使用できる文字は何ですか?


83

<input>動的に生成するPHPスクリプトがあるので、name属性内の文字をフィルタリングする必要があるかどうか疑問に思いました。

名前は文字で始まる必要があることは知っていますが、他のルールはわかりません。PHPは角かっこを使用してフォームデータから配列を作成するため、角かっこは許可する必要があると思います。括弧はどうですか?スペース?

回答:


28

フォームコントロール名に表示できる文字に関する唯一の実際の制限は、フォームがGETで送信されたときです。

「「get」メソッドは、フォームデータセットの値をASCII文字に制限します。」参照

ここに良いスレッドがあります


では、他の要素とはname異なるデータ型が<input>ありますか?面白い。
DLH 2010

<a>ほとんどの要素と同じですが、異なります<meta>
Alohci 2010

4
うん。試してみました<input>name属性にあらゆる種類のがらくたを入れて HTML 4.01Strictで検証されました。受け入れました!
DLH 2010

Twitterはこの種の名前を使用しますが、特別な理由でadv ...... user [user_password]、user [email]を取得します
Vishal Sharma

1
「フォームコントロール名に表示できる文字の唯一の実際の制限は、フォームがGETで送信されたときです」—いいえ。名前に表示できる文字を制限するのではなく、変換時にURLエンコードする必要があることを意味します。 URLに。
クエンティン

55

nameフォームフィールドの属性に対してすべての文字が送信されるわけではないことに注意してください(POSTを使用している場合でも)。

空白文字はトリミングされ、内側の空白文字も文字._。に置き換えられます。(Chrome 23、Firefox 13、Internet Explorer 9、すべてWin7でテスト済み。)


11
この通知を追加していただきありがとうございます、仲間。を使用してコーディングを開始しようとしていました。セパレーターとして。
Davis Peixoto 2013年

1
このページによると、内側の空白はプラス記号(+)に置き換えられます:w3schools.com/tags/tryit.asp
filename =

2
私は2番目の@Daveです。同じことを考えていた人にとっては、おそらく配列スタイルの入力を探しているでしょう:のfirst[second]代わりにfirst.second
JD 2015

5
これはサーバー固有のものであり、ブラウザーのものではないことに注意してください。Win7 FF3 / 3.5 / 31、IE5 / 7/8/9/10 / Edge、Chrome39、およびSafari Windows 5でテストされ、それらすべてがPOSTの名前として「testthis.stuff」(先頭に4つのスペース)を送信しました。 VS2012にバンドルされているASP.NET開発サーバー。
abluejelly 2015

3
以下の@Aleksanderのコメントを参照してください。一部のサーバーは「。」を変換する場合があります。'_'に変更しますが、ブラウザでは発生していません。
Jeff Lowery 2017

38

[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-dataPOSTリクエスト本文のサブパートヘッダーで、理論的に可能な場合でも、フィールドのエンコーディングを指定するブラウザはありません。(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代わりに使用してください)。


9

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サーバーによっては予期しない動作が発生する可能性があるため、使用しません


何が起こるのですか?name = "foobar"を使用する場合。
スコール2018

0

HTML入力タグのid属性とname属性を意味しますか?

もしそうなら、私は許可された「入力」名文字をaz(AZ)、0-9および限られた範囲の句読点( "。"、 "、"など)のみに制限(または変換)したいと思うでしょう。 XSSエクスプロイトなどの可能性を制限するためだけの場合。

さらに、なぜユーザーが入力タグの任意の側面を制御できるようにするのですか?(検証の観点から、入力タグ名を「custom_1」、「custom_2」などに保ち、必要に応じてこれらをマップすることは、最終的には簡単ではないかもしれません。)


私の名前がこのように生成されることはないかもしれません。私は、オフィスの技術に精通していないメンバーがフォームフィールドを指定できるようにする方法を検討しているところです。
DLH 2010

@DLH私は(名前の衝突などのリスクを取り除くために)上記のような中間的なアプローチに誘惑されます。:-)
ジョンパーカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.