Di Ruby on Rails 3 (saat ini menggunakan Beta 4), saya melihat bahwa ketika menggunakan form_tag
atau form_for
pembantu ada bidang tersembunyi bernama _snowman
dengan nilai ☃ ( Unicode \ x9731) muncul.
Jadi, untuk apa ini?
ruby-on-rails
forms
unicode
Peter Mortensen
sumber
sumber
Jawaban:
Parameter ini ditambahkan ke formulir untuk memaksa Internet Explorer (5, 6, 7 dan 8) untuk menyandikan parameternya sebagai unicode.
Secara khusus, bug ini dapat dipicu jika pengguna mengalihkan pengodean browser ke Latin-1. Untuk memahami mengapa pengguna memutuskan untuk melakukan sesuatu yang tampaknya sangat gila, lihat pencarian google ini . Setelah pengguna menempatkan situs web ke mode Latin-1, jika mereka menggunakan karakter yang dapat dipahami sebagai Latin-1 dan Unicode (misalnya, é atau ç, umum dalam nama), Internet Explorer akan menyandikannya dalam bahasa Latin -1.
Ini berarti bahwa jika pengguna mencari "Ché Guevara", itu akan terjadi secara tidak benar di sisi server. Di Ruby 1.9, ini akan menghasilkan kesalahan pengodean ketika teks mau tidak mau masuk ke mesin ekspresi reguler. Di Ruby 1.8, itu akan menghasilkan hasil yang rusak bagi pengguna.
Dengan membuat parameter yang hanya dapat dipahami oleh IE sebagai karakter unicode, kami memaksa IE untuk melihat atribut accept-charset, yang kemudian memerintahkannya untuk menyandikan semua karakter sebagai UTF-8, bahkan yang dapat dikodekan. dalam bahasa Latin-1.
Ingatlah bahwa di Ruby 1.8, sangat sepele untuk memasukkan data Latin-1 ke dalam basis data UTF-8 Anda (karena tidak ada dalam seluruh tumpukan yang memeriksa bahwa byte yang dikirim pengguna pada titik mana pun adalah karakter UTF-8 yang valid). Akibatnya, sangat umum untuk aplikasi Ruby (dan aplikasi PHP, dll.) Untuk menunjukkan bug yang dihadapi pengguna ini, dan karenanya sangat umum bagi pengguna untuk mencoba mengubah pengodean sebagai ukuran paliatif.
Semua yang mengatakan, ketika saya menulis tambalan ini, saya tidak menyadari bahwa nama parameter akan pernah muncul di tempat yang menghadap pengguna (tidak dengan formulir yang menggunakan tindakan GET, seperti formulir pencarian). Karena hal itu terjadi, kita akan mengganti nama parameter ini menjadi
_e
, dan menggunakan karakter unicode yang lebih tidak berbahaya.sumber
Ini di sini untuk mendukung Internet Explorer 5 dan mendorongnya untuk menggunakan UTF-8 untuk bentuknya.
Pesan komit yang terlihat di sini menjelaskannya sebagai berikut:
Singkatnya, Anda dapat dengan aman mengabaikan parameter ini.
Namun, saya tidak yakin mengapa kami mendukung teknologi lama seperti Internet Explorer 5. Sepertinya ini keputusan yang sangat non-Ruby on Rails jika Anda bertanya kepada saya.
sumber