6

フォームの数値入力に問題があります。88.2 などの数字を入力して送信すると、問題はありません。しかし、この他の人が同じことをした場合、数値入力から変数をエコーすると、php コードで小数点 ( .) が削除されていることがわかります。

彼がコンマを使用しても小数点は削除されませんが、私がコンマを使用すると小数点が削除されます。これを修正して "." のみを受け入れるようにする方法はありますか? 小数点として?

入力は次のとおりです。

<input id="version" name="version" step="0.1" min="1.0" max="250.0" type="number" class="input-small" placeholder="87.2"></input>

PHP コードに異常な点は何もありません。

echo $_POST['version'];

input-small css:

.input-small {
  width: 90px;
}
4

2 に答える 2

3

へのサポート<input type=number>はまだ非常に限定的で、不完全で、バグがあります。

たとえば、IE 10 と Firefox 19 ではサポートされていません。それらでは、要素は要素にフォールバックします<input type=text>。つまり、すべての文字列が入力として受け入れられ、チェックなしでそのままサーバーに渡されます。

Chrome など、それをサポートするブラウザーでは、HTML5 CR定義が意図的に開いたままにするため、動作はさまざまであり、変化することが予想されます。ブラウザーは、何らかの方法で数値入力用のウィジェットを提供し、データが最終的にサーバーは、要素の属性 (指定された範囲内など) に従って正しいです。

実際には、実装はブラウザのロケールに依存し、作成者としてそれを制御することはできません。これは、ブラウザが 88.2 を受け入れるか、88,2 を受け入れる (そして内部的に 88.2 に変換する) か、両方を受け入れるか、または原則として象形文字の入力のみを受け入れる (内部的にそれを正規形)。余分な文字が破棄されるようにユーザー入力を解析することさえあります。つまり、88FOO と 88.2 は、コンマが小数点記号である場合に 88 に切り捨てられる可能性があります。

ブラウザとプラットフォームが説明されておらず、サーバーが何を取得するかが不明であるため、あなたの場合に何が起こるかを判断するのは困難です. しかし、重要なことは、<input type=number>まったく信頼できないということです。言語バージョンとロケール設定を含め、同じオペレーティング システムで同じバージョンの同じブラウザを全員が使用する制御された環境で使用できます。それ以外の場合は、数値入力に使用<input type=text>し、入力をサーバー側で解析し、必要に応じてクライアント側で事前チェ​​ックし、予想される入力形式 (小数点のコンマと小数点など) をユーザーに通知するようにしてください。

于 2013-02-21T06:26:47.420 に答える