W Ruby on Rails 3 (obecnie używającym Beta 4) widzę, że podczas używania pomocników form_tag
lub form_for
pojawia się ukryte pole o nazwie _snowman
☃ ( Unicode \ x9731).
Więc po co to jest?
W Ruby on Rails 3 (obecnie używającym Beta 4) widzę, że podczas używania pomocników form_tag
lub form_for
pojawia się ukryte pole o nazwie _snowman
☃ ( Unicode \ x9731).
Więc po co to jest?
Odpowiedzi:
Ten parametr został dodany do formularzy, aby wymusić na Internet Explorerze (5, 6, 7 i 8) kodowanie swoich parametrów jako Unicode.
W szczególności ten błąd może zostać wywołany, jeśli użytkownik zmieni kodowanie przeglądarki na Latin-1. Aby zrozumieć, dlaczego użytkownik zdecydowałby się zrobić coś pozornie tak szalonego, sprawdź tę wyszukiwarkę Google . Gdy użytkownik przełączy witrynę w tryb Latin-1, jeśli użyje znaków, które mogą być rozumiane zarówno jako Latin-1, jak i Unicode (na przykład é lub ç, powszechne w nazwach), Internet Explorer zakoduje je w alfabecie łacińskim -1.
Oznacza to, że jeśli użytkownik wyszukuje hasło „Ché Guevara”, zostanie to nieprawidłowo przesłane po stronie serwera. W Ruby 1.9 spowoduje to błąd kodowania, gdy tekst nieuchronnie trafi do silnika wyrażeń regularnych. W Ruby 1.8 spowoduje to nieprawidłowe wyniki dla użytkownika.
Tworząc parametr, który może być rozumiany tylko przez IE jako znak Unicode, zmuszamy IE do patrzenia na atrybut accept-charset, który następnie mówi mu, aby zakodował wszystkie znaki jako UTF-8, nawet te, które można zakodować w języku łacińskim-1.
Należy pamiętać, że w Ruby 1.8 bardzo trywialne jest umieszczenie danych Latin-1 w bazie 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 bardzo często zdarza się, że aplikacje Ruby (i aplikacje PHP itp.) Wykazują ten błąd dotyczący użytkownika, a zatem niezwykle często użytkownicy próbują zmienić kodowanie jako środek paliatywny.
Wszystko to powiedziawszy, kiedy pisałem tę łatkę, nie zdawałem sobie sprawy, że nazwa parametru kiedykolwiek pojawi się w miejscu widocznym dla użytkownika (ma to miejsce w przypadku formularzy korzystających z akcji GET, takich jak formularze wyszukiwania). Ponieważ tak jest, zmienimy nazwę tego parametru na _e
i użyjemy bardziej nieszkodliwie wyglądającego znaku Unicode.
To jest tutaj, aby wspierać Internet Explorera 5 i zachęcić go do używania UTF-8 w swoich formularzach.
Komunikat dotyczący zatwierdzenia widoczny tutaj szczegółowo opisuje to w następujący sposób:
Napraw kilka znanych problemów z kodowaniem stron internetowych:
- Określ zestaw znaków akceptacji we wszystkich formularzach. Wszystkie najnowsze przeglądarki, a także IE5 +, będą używać kodowania określonego dla parametrów formularza
- Niestety, IE5 + nie będzie patrzeć na accept-charset, chyba że przynajmniej jeden znak z wartości formularza nie znajduje się w zestawie znaków strony. Ponieważ użytkownik może nadpisać domyślny
zestaw znaków (który Railsy ustawiają na UTF-8), udostępniamy ukryte dane wejściowe zawierające znak Unicode, zmuszając IE do spojrzenia na accept-charset.- Teraz, gdy zdecydowana większość danych wejściowych sieci Web to UTF-8, ustawiliśmy parametry przychodzące na UTF-8. Pozwoli to wyeliminować wiele przypadków niezgodnego kodowania między ASCII-8BIT i
UTF-8.- Możesz bezpiecznie zignorować parametry [: _ snowman]
Krótko mówiąc, możesz bezpiecznie zignorować ten parametr.
Mimo to nie jestem pewien, dlaczego wspieramy stare technologie, takie jak Internet Explorer 5. Wydaje mi się, że to decyzja zupełnie niezwiązana z Ruby on Rails.