Ruby on Rails 3(現在Beta 4を使用)では、form_tag
またはform_for
ヘルパーを使用する_snowman
と、when(Unicode \ x9731)の値で名前が付けられた非表示フィールドが表示されることがわかります。
それで、これは何のためですか?
Ruby on Rails 3(現在Beta 4を使用)では、form_tag
またはform_for
ヘルパーを使用する_snowman
と、when(Unicode \ x9731)の値で名前が付けられた非表示フィールドが表示されることがわかります。
それで、これは何のためですか?
回答:
このパラメーターは、Internet Explorer(5、6、7、および 8)がパラメーターをUnicodeとしてエンコードするように強制するためにフォームに追加されました。
具体的には、このバグは、ユーザーがブラウザーのエンコードをLatin-1に切り替えた場合にトリガーされます。ユーザーが一見すごいことをする理由を理解するには、このGoogle検索をチェックしてください。ユーザーがWebサイトをLatin-1モードにした後、Latin-1とUnicodeの両方として理解できる文字(たとえば、名前に共通のéまたはç)を使用している場合、Internet Explorerはそれらをラテン語でエンコードします-1。
つまり、ユーザーが "ChéGuevara"を検索すると、サーバー側では正しく検索されません。Ruby 1.9では、テキストが必然的に正規表現エンジンに入ると、エンコーディングエラーが発生します。Ruby 1.8では、ユーザーの結果が壊れます。
IEだけがUnicode文字として理解できるパラメーターを作成することにより、IEにaccept-charset属性を確認するように強制します。これにより、すべての文字をUTF-8としてエンコードするように指示されます。 Latin-1で。
ルビー1.8で、あなたのUTF-8のデータベースにLatin-1のデータを取得することが非常に些細であることに注意してください(以降何もスタック全体のチェックで、ユーザが任意の時点で送信されたことのバイトが有効なUTF-8文字であること)。その結果、Rubyアプリケーション(およびPHPアプリケーションなど)がこのユーザー向けのバグを示すことは非常に一般的です。したがって、緩和策としてユーザーがエンコードを変更しようとすることは非常に一般的です。
そうは言っても、このパッチを作成したとき、パラメーターの名前がユーザーに直接表示される場所に表示されることを理解していませんでした(検索フォームなどのGETアクションを使用するフォームで行われます)。そのため、このパラメーターの名前をに変更し_e
、より無害に見えるUnicode文字を使用します。
これは、Internet Explorer 5をサポートし、フォームにUTF-8を使用することを推奨するためのものです。
ここで見られるコミットメッセージは次のようにそれを詳述します:
いくつかの既知のWebエンコーディングの問題を修正します。
- すべてのフォームでaccept-charsetを指定します。最近のすべてのブラウザとIE5 +は、フォームパラメータに指定されたエンコーディングを使用します
- 残念ながら、フォームの値の少なくとも1つの文字がページの文字セットにない場合を除き、IE5 +はaccept-charsetを調べません。ユーザーはデフォルトの
文字セット(RailsがUTF-8に設定する)をオーバーライドできるため、Unicode文字を含む非表示の入力を提供し、IEにaccept-charsetを確認させる。- Web入力の大部分がUTF-8であるため、受信パラメーターをUTF-8に設定します。これにより、ASCII-8BITと
UTF-8の間で互換性のないエンコーディングの多くのケースが排除されます。- params [:_ snowman]は無視しても問題ありません
つまり、このパラメーターは無視しても問題ありません。
それでも、なぜInternet Explorer 5のような古いテクノロジーをサポートしているのかはわかりません。私に尋ねると、Ruby on Railsの決定ではないようです。