In Ruby on Rails 3 (derzeit mit Beta 4) wird bei Verwendung von form_tag
oder helfer form_for
ein verstecktes Feld _snowman
mit dem Wert ☃ ( Unicode \ x9731) angezeigt.
Also, wofür ist das?
In Ruby on Rails 3 (derzeit mit Beta 4) wird bei Verwendung von form_tag
oder helfer form_for
ein verstecktes Feld _snowman
mit dem Wert ☃ ( Unicode \ x9731) angezeigt.
Also, wofür ist das?
Antworten:
Dieser Parameter wurde Formularen hinzugefügt, um Internet Explorer (5, 6, 7 und 8) zu zwingen, seine Parameter als Unicode zu codieren.
Insbesondere kann dieser Fehler ausgelöst werden, wenn der Benutzer die Codierung des Browsers auf Latin-1 umstellt. Schauen Sie sich diese Google-Suche an , um zu verstehen, warum sich ein Nutzer für etwas so Verrücktes entscheidet . Sobald der Benutzer die Website in den Latin-1-Modus versetzt hat und Zeichen verwendet, die sowohl als Latin-1 als auch als Unicode verstanden werden können (z. B. é oder ç, häufig in Namen), codiert Internet Explorer sie in Latin -1.
Dies bedeutet, dass ein Benutzer, der nach "Ché Guevara" sucht, auf der Serverseite falsch durchkommt. In Ruby 1.9 führt dies zu einem Codierungsfehler, wenn der Text unweigerlich in die Engine für reguläre Ausdrücke gelangt. In Ruby 1.8 führt dies zu fehlerhaften Ergebnissen für den Benutzer.
Indem wir einen Parameter erstellen, der nur vom IE als Unicode-Zeichen verstanden werden kann, zwingen wir den IE, das Attribut accept-charset zu betrachten, das ihn dann anweist, alle Zeichen als UTF-8 zu codieren, auch diejenigen, die codiert werden können in Latein-1.
Beachten Sie, dass es in Ruby 1.8 äußerst trivial ist, Latin-1-Daten in Ihre UTF-8-Datenbank zu übertragen (da nichts im gesamten Stapel überprüft, ob die vom Benutzer zu irgendeinem Zeitpunkt gesendeten Bytes gültige UTF-8-Zeichen sind). Infolgedessen ist es bei Ruby-Anwendungen (und PHP-Anwendungen usw. usw.) äußerst häufig, dass dieser benutzerbezogene Fehler auftritt, und daher ist es äußerst häufig, dass Benutzer versuchen, die Codierung als palliative Maßnahme zu ändern.
Als ich diesen Patch schrieb, war mir nicht klar, dass der Name des Parameters jemals an einer benutzerbezogenen Stelle erscheinen würde (dies gilt für Formulare, die die GET-Aktion verwenden, z. B. Suchformulare). Da dies der Fall ist, werden wir diesen Parameter in umbenennen _e
und ein harmlos aussehendes Unicode-Zeichen verwenden.
Dies dient dazu, Internet Explorer 5 zu unterstützen und es zu ermutigen, UTF-8 für seine Formulare zu verwenden.
In der hier angezeigten Festschreibungsnachricht wird Folgendes beschrieben:
Beheben Sie mehrere bekannte Webcodierungsprobleme:
- Geben Sie in allen Formularen einen Akzeptanzzeichensatz an. Alle neueren Browser sowie IE5 + verwenden die für Formularparameter angegebene Codierung
- Leider wird in IE5 + der Akzeptanz-Zeichensatz nur angezeigt, wenn mindestens ein Zeichen in den Werten des Formulars nicht im Zeichensatz der Seite enthalten ist. Da der Benutzer den Standardzeichensatz
(den Rails auf UTF-8 setzt) überschreiben kann , stellen wir eine versteckte Eingabe bereit, die ein Unicode-Zeichen enthält, wodurch der IE gezwungen wird, den Akzeptanzzeichensatz anzuzeigen.- Da die überwiegende Mehrheit der Webeingaben UTF-8 ist, setzen wir die eingehenden Parameter auf UTF-8. Dadurch werden viele Fälle inkompatibler Codierungen zwischen ASCII-8BIT und
UTF-8 beseitigt .- Sie können Parameter [: _ Schneemann] ignorieren
Kurz gesagt, Sie können diesen Parameter ignorieren.
Trotzdem bin ich mir nicht sicher, warum wir alte Technologien wie Internet Explorer 5 unterstützen. Wenn Sie mich fragen, scheint dies eine Entscheidung zu sein, die nicht von Ruby on Rails stammt.