Ruby on Rails 3'te (şu anda Beta 4 kullanıyor), form_tag
veya form_for
yardımcılarını kullanırken _snowman
☃ ( Unicode \ x9731) değeri ile adlandırılan gizli bir alan olduğunu görüyorum .
Peki, bu ne için?
Ruby on Rails 3'te (şu anda Beta 4 kullanıyor), form_tag
veya form_for
yardımcılarını kullanırken _snowman
☃ ( Unicode \ x9731) değeri ile adlandırılan gizli bir alan olduğunu görüyorum .
Peki, bu ne için?
Yanıtlar:
Bu parametre, Internet Explorer'ı (5, 6, 7 ve 8) parametrelerini unicode olarak kodlamaya zorlamak için formlara eklenmiştir .
Özellikle, kullanıcı tarayıcının kodlamasını Latin-1 olarak değiştirirse bu hata tetiklenebilir. Bir kullanıcının neden bu kadar çılgınca bir şey yapmaya karar verdiğini anlamak için bu Google aramasına göz atın . Kullanıcı web sitesini Latin-1 moduna geçirdiğinde, hem Latin-1 hem de Unicode olarak anlaşılabilen karakterler kullanıyorsa (örneğin, adlarda ortak olan é veya ç), Internet Explorer bunları Latin dilinde kodlar -1.
Bu, bir kullanıcı "Ché Guevara" yı ararsa, sunucu tarafında yanlış bir şekilde geleceği anlamına gelir. Ruby 1.9'da bu, metin kaçınılmaz olarak normal ifade motoruna girdiğinde bir kodlama hatasına neden olacaktır. Ruby 1.8'de, kullanıcı için kırık sonuçlara neden olacaktır.
IE tarafından yalnızca bir unicode karakter olarak anlaşılabilecek bir parametre oluşturarak, IE'yi kabul-karakter kümesi özniteliğine bakmaya zorlarız; bu kod daha sonra kodlanabilir olabilecek tüm karakterleri UTF-8 olarak kodlamasını söyler Latince-1.
Ruby 1.8'de, Latin-1 verilerini UTF-8 veritabanınıza almanın son derece önemsiz olduğunu unutmayın ( tüm yığındaki hiçbir şey , kullanıcının herhangi bir noktada gönderilen baytların geçerli UTF-8 karakterleri olmadığını kontrol etmez). Sonuç olarak, Ruby uygulamalarının (ve PHP uygulamalarının, vb.) Bu kullanıcıya yönelik hatayı sergilemesi son derece yaygındır ve bu nedenle kullanıcıların kodlamayı palyatif bir önlem olarak değiştirmeye çalışması son derece yaygındır.
Bütün bunlar, bu yamayı yazdığımda, parametrenin adının kullanıcıya bakan bir yerde görüneceğini fark etmedim (arama formları gibi GET eylemini kullanan formlarla yapar). Bu nedenle, bu parametreyi yeniden adlandırır _e
ve daha zararsız görünen bir unicode karakter kullanırız.
Bu, Internet Explorer 5'i desteklemek ve formları için UTF-8'i kullanmaya teşvik etmek için burada .
Burada görülen taahhüt mesajı bunu şöyle detaylandırıyor:
Bilinen birkaç web kodlama sorununu giderin:
- Tüm formlarda kabul-karakter kümesini belirtin. IE5 + 'nın yanı sıra tüm yeni tarayıcılar form parametreleri için belirtilen kodlamayı kullanacak
- Ne yazık ki, formun değerlerinde en az bir karakter sayfanın karakter kümesinde değilse, IE5 + kabul-karakter kümesine bakmaz. Kullanıcı varsayılanı geçersiz kılabileceğinden
karakter kümesini kılabildiğinden (Rails UTF-8 olarak ayarlanır), unicode karakter içeren gizli bir girdi sağlayarak IE'yi kabul karakter kümesine bakmaya zorlarız.- Artık web girişinin büyük çoğunluğu UTF-8 olduğundan, gelen parametreleri UTF-8 olarak ayarladık. Bu ASCII-8BIT ve
UTF-8 arasındaki birçok uyumsuz kodlama olayını ortadan kaldıracaktır .- Paramleri güvenle göz ardı edebilirsiniz [: _ snowman]
Kısacası, bu parametreyi güvenle yok sayabilirsiniz.
Yine de, Internet Explorer 5 gibi eski teknolojileri neden desteklediğimden emin değilim. Bana sorarsanız Ruby on Rails kararı gibi görünüyor.