Do czego służy snowman param w Ruby on Rails 3 forms?

W Ruby on Rails 3 (obecnie używa Beta 4), widzę, że podczas używania helperów form_tag LUB form_for pojawia się ukryte pole o nazwie _snowman z wartością ☃ (Unicode \x9731).

Więc po co to?
Author: Peter Mortensen, 2010-07-11

2 answers

Ten parametr został dodany do formularzy, aby wymusić przeglądarkę Internet Explorer (5, 6, 7 i 8), aby zakodować jego parametry jako unicode.

W szczególności, ten błąd może zostać wywołany, jeśli użytkownik przełączy kodowanie przeglądarki NA Latin-1. Aby zrozumieć, dlaczego użytkownik zdecydował się zrobić coś pozornie tak szalonego, sprawdź Ta wyszukiwarka google . Gdy użytkownik przełączy stronę w tryb Latin-1, jeśli użyje znaków, które mogą być rozumiane zarówno jako Latin-1, Jak i Unicode (dla instancja, é lub ç, wspólne w nazwach), Internet Explorer zakoduje je w Latin-1.

Oznacza to, że jeśli użytkownik wyszukuje "Ché Guevara", pojawi się on nieprawidłowo po stronie serwera. W Rubim 1.9 spowoduje to błąd kodowania, gdy tekst nieuchronnie trafi do silnika wyrażeń regularnych. W Ruby 1.8 spowoduje to złamanie wyników dla użytkownika.

Tworząc parametr, który może być rozumiany tylko przez IE jako znak unicode, wymuszamy IE aby przyjrzeć się atrybutowi accept-charset, który następnie każe kodować wszystkie znaki jako UTF-8, nawet te, które mogą być zakodowane w Latin-1.

Należy pamiętać, że w Rubim 1.8, jest niezwykle trywialne, aby pobrać dane Latin - 1 do bazy danych UTF-8 (ponieważ nic w całym stosie nie sprawdza, czy bajty wysłane przez użytkownika w dowolnym momencie są poprawnymi znakami UTF-8). W rezultacie jest to niezwykle powszechne w aplikacjach Ruby (i aplikacjach PHP itp. itd.) aby pokazać to błąd użytkownika, a co za tym idzie niezwykle częsty dla użytkowników, którzy próbują zmienić kodowanie jako środek paliatywny.

To wszystko powiedziaĹ 'o, Ĺźe kiedy pisaĹ' em ten patch, nie zdawaĺ ' em sobie sprawy, Ĺźe nazwa parametru kiedykolwiek pojawi siÄ ™ w miejscu skierowanym do uĹźytkownika (ma to miejsce w przypadku formularzy, ktĂłre uĹźywajÄ ... akcji GET, takich jak formularze wyszukiwania). Ponieważ tak jest, zmienimy nazwę tego parametru na _e i użyjemy bardziej nieszkodliwego znaku unicode.

 297
Author: Yehuda Katz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-23 04:09:17

To jest tutaj, aby wspierać Internet Explorer 5 i zachęcić go do używania UTF-8 dla jego formularzy.

Wiadomość zatwierdzająca widziana tutaj opisuje ją następująco:

Napraw kilka znanych problemów z kodowaniem stron internetowych:

  • określa accept-charset dla wszystkich formularzy. Wszystkie najnowsze przeglądarki, a także IE5+, użyje podanego kodowania dla parametrów formularza
  • niestety, IE5+ nie będzie patrzeć na accept-charset, chyba że co najmniej jeden charakter w wartości formularza nie są w zestawie znaków strony. Ponieważ użytkownik może nadpisać wartość domyślną
    charset (które Rails ustawia na UTF-8), zapewniamy ukryte wejście zawierające znak unicode, zmuszając IE do spójrz na accept-charset.
  • Teraz, gdy zdecydowana większość wejścia internetowego to UTF-8, ustawiamy wejście parametry do UTF-8. To będzie wyeliminowanie wielu przypadków niezgodności kodowanie pomiędzy ASCII-8BIT i
    UTF-8.
  • możesz bezpiecznie zignorować params [: _snowman]

W skrócie, można bezpiecznie zignorować ten parametr.

Nadal nie jestem pewien, dlaczego wspieramy stare technologie, takie jak Internet Explorer 5. Wydaje mi się, że to bardzo Nie-Ruby on Rails decyzja, jeśli O mnie chodzi.

 55
Author: Matthew Savage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-01 12:28:11