0

「通常の」テストに加えて、エンコーディングもチェックするフォーム検証ユニットを作成しようとしています。

この記事http://www.w3.org/International/questions/qa-forms-utf-8によると、許可される文字は 0 ~ 31 の範囲の CR、LF、および TAB であり、DEL=127 は許可されません。

一方、0x80 ~ 0xA0 の範囲には制御文字があります。さまざまな情報源で、それらが許可されていることと許可されていないことを見てきました。また、これが XHTML、HTML、および XML で異なることも確認しました。

一部の記事で FF も許可されていると書かれていましたか?

誰かが提供できる情報源と提供できない情報源で良い答えを提供できますか?

編集: http://www.w3.org/International/questions/qa-controlsあいまいさもあります

C1範囲がサポートされています

しかし、表はそれらが違法であることを示しており、以前に示された UTF-8 検証はそれらを許可していますか?

4

8 に答える 8

7

私はあなたがこれを間違った方法で見ていると思います。リンクするリソースは、 (X)HTMLで有効なエンコードされた値を指定しますが、サーバーに返されるさまざまなフォームコントロールの値のように、Webフォームからの「応答」を検証したいようです。 。その場合、(X)HTMLで何が有効であるかを調べる必要はありませんが、application / x-www-form-urlencodedで何が有効であるか、場合によってはmultipart/form-dataのMIMEタイプでも調べる必要があります。要素HTML4.01標準で<FORM>は、application / x-www-form-urlencodedの場合、「英数字以外の文字は「%HH」に置き換えられます」と明確に規定されています。

これはデフォルトのコンテンツタイプです。このコンテンツタイプで送信されるフォームは、次のようにエンコードする必要があります。

  1. コントロールの名前と値はエスケープされます。スペース文字は「+」に置き換えられ、予約文字は[RFC1738]のセクション2.2で説明されているようにエスケープされます。英数字以外の文字は「%HH」、パーセント記号、およびASCIIコードを表す2つの16進数に置き換えられます。キャラクター。改行は「CRLF」ペア(つまり、 `%0D%0A')として表されます。
  2. コントロールの名前/値は、ドキュメントに表示されている順序で一覧表示されます。名前は「=」で値から分離され、名前/値のペアは「&」で互いに分離されます。

含まれている文字エンコード(つまり、%A0改行なしスペースかエラーか)についてはaccept-charset、要素の属性<FORM>と応答の(実際にはGETまたはPOST要求)Content-Typeヘッダーによってネゴシエートされます。

于 2009-06-12T00:21:26.783 に答える
6

ポステルの法則: 何をするにも保守的であること。他者から受け入れるものに寛大であること。

他の人が読むためのドキュメントを生成している場合は、技術的には合法であっても、すべての制御文字を回避/エスケープする必要があります。また、ドキュメントを解析している場合は、たとえ技術的に違法であっても、すべての制御文字を受け入れるように努力する必要があります。

于 2009-06-10T16:13:23.647 に答える
1

まず第一に、すべてのオクテットが有効です。前述のUTF-8シーケンスの正規表現は、実際にはユーザーが入力することはかなりまれであるため、一部を省略しています。しかし、それはそれらが無効であるという意味ではありません。それらが発生することは期待されていません。

于 2009-06-07T12:03:14.927 に答える
1

これらの範囲の Unicode 文字は、HTML 4.01 で有効です。

0x09..0x0A
0x0D
0x20..0x7E
0x00A0..0xD7FF
0xE000..0x10FFFF    

XHTML 1.0 では... 不明です。http://cmsmcq.com/2007/C1.xml#o127626258を参照してください。

于 2010-10-20T03:34:28.813 に答える
1

あなたが言及した最初のリンクは、XHTMLで許可されている文字の検証とは何の関係もありません...そのリンクの例は、生データがutf-8エンコーディングであるかどうかを検出するための一般的/汎用的なパターンを単に示しています。

これは 2 番目のリンクからの引用です。

HTML、XHTML、および XML 1.0 は、HT (水平集計) U+0009、LF (ライン フィード) U+000A、および CR (キャリッジ リターン) U+000D を除いて、C0 範囲をサポートしません。C1 範囲がサポートされています。つまり、コントロールを直接エンコードするか、NCR (Numeric Character References) として表すことができます。

私がこれを読む方法は次のとおりです。

C1 範囲の制御文字は、エンコード (base64 または Hex 表現を使用) するか、NCR として表現する場合にサポートされます。

C0 範囲では、U+0009、U+000A、および U+000D のみがサポートされます。その範囲内の他の制御コードは表すことができません。

于 2009-06-10T15:22:54.047 に答える
0

どのプログラミング言語を使用していますか?少なくともJavaの場合、文字列(またはバイト配列)のエンコーディングをチェックするライブラリが存在します。他の言語にも同様のライブラリが存在すると思います。

于 2009-06-10T09:03:14.063 に答える
0

私はあなたの質問を正しく理解していますか:フォームによって送信されたデータが有効であり、適切にエンコードされているかどうかを確認したいですか?

もしそうなら、なぜ一度にいくつかのことをするのですか?これらのチェックを分離して、段階的に実行する方がはるかに簡単です、IMHO。

  1. 送信されたフォームデータが正しくエンコードされていることを確認する必要があります(UTF-8では収集します)。Ridcully大書記長が言うように、それはほとんどの言語で簡単にチェックできます。
  2. 次に、エンコーディングが正しい場合は、それが有効なフォームデータであるかどうかを確認できます。
  3. 次に、フォームデータが有効である場合、データに期待どおりのものが含まれているかどうかを確認できます。
于 2009-06-10T10:55:33.867 に答える
0

ドキュメントが XHTML であることがわかっている場合は、ドキュメントを読み込んでスキーマに対して検証する必要があります。

于 2009-06-01T20:58:36.937 に答える