ruby-on-rails - 複数 - rails ルーティング ネスト




Ruby on Rails 3フォームの_snowmanパラメータは何ですか? (2)

Ruby on Rails 3(現在ベータ4を使用しています)では、 form_tagまたはform_forヘルパーを使用すると_snowmanという名前の隠しフィールドが_snowmanれ、値が表示されていることがわかります( Unicode \ x9731)。

では、これは何のためですか?


このパラメーターは、Internet Explorer(5,6,7,8)にそのパラメーターをユニコードとしてエンコードさせるためにフォームに追加されました。

具体的には、ユーザーがブラウザのエンコーディングをLatin-1に切り替えると、このバグが発生する可能性があります。 ユーザーが一見そんなに奇妙なことをする理由を理解するには、 このGoogle検索をチェックしてください。 ユーザーがWebサイトをLatin-1モードにすると、Latin-1とUnicode(たとえば、名前に共通するéまたはç)として理解できる文字を使用すると、Internet ExplorerはそれらをLatinでエンコードします-1。

つまり、ユーザーが「ChéGuevara」を検索すると、サーバー側で間違って表示されます。 Ruby 1.9では、テキストが必然的に正規表現エンジンに入り込むと、エンコーディングエラーが発生します。 Ruby 1.8では、結果が壊れてしまいます。

IEがUnicode文字としてしか理解できないパラメータを作成することによって、IEはaccept-charset属性を見て、すべての文字をUTF-8としてエンコードするように指示します。ラテン語-1で。

Ruby 1.8では、ラテン1データをUTF-8データベースに取り込むことは非常に些細なことです(スタック全体で、ユーザーが送信したバイトが有効なUTF-8文字であることを確認するものはないため)。 その結果、Rubyアプリケーション(およびPHPアプリケーションなど)がこのユーザ向けのバグを表示することは非常に一般的です。したがって、ユーザが緩和策としてエンコーディングを変更しようとするのは非常に一般的です。

つまり、このパッチを書いたときに、パラメータの名前が検索フォームなどのGETアクションを使用するフォームで表示されることに気付かなかったということです。 それ以来、このパラメータの名前を_e変更し、より無害な外観のユニコード文字を使用します。


これは、Internet Explorer 5をサポートし、そのフォームにUTF-8を使用することを推奨します。

here表示されているコミットメッセージは、次のように詳しく説明します。

いくつかの既知のWebエンコードの問題を修正しました。

  • すべてのフォームでaccept-charsetを指定します。 最近のすべてのブラウザーとIE5 +は、フォームパラメーターに指定されたエンコードを使用します
  • 残念ながら、IE5 +は、フォームの値の中の少なくとも1つの文字がページのcharsetにない場合を除き、accept-charsetを調べません。 ユーザーはデフォルトの設定を上書きできるため
    (UTF-8に設定されている)文字セットでは、ユニコード文字を含む隠れた入力を提供し、IEがaccept-charsetを見るようにします。
  • Web入力の大部分がUTF-8であることから、インバウンドパラメータをUTF-8に設定しました。 これにより、ASCII-8BITとASCII-8BITの間の互換性のないエンコード
    UTF-8。
  • params [:_ snowman]を無視しても問題ありません。

つまり、このパラメータは無視しても問題ありません。

それでも、私がInternet Explorer 5のような古い技術をサポートしている理由はわかりません。あなたが私に尋ねると、Ruby on Railsの決定は非常に似ていないようです。





unicode