Apakah penggunaan "utf8 = ✓" lebih baik daripada "utf8 = true"?

569

Saya baru-baru ini melihat beberapa URI yang berisi parameter kueri "utf8 = ✓". Kesan pertama saya (setelah berpikir "mmm, terlihat keren") adalah ini dapat digunakan untuk mendeteksi pengkodean karakter yang rusak.

Jadi, apakah ini cara yang lebih baik untuk menyelesaikan masalah potensial dengan pengkodean karakter, atau hanya pengembang yang bersenang-senang dengan peretasan?

Gary Rowe
sumber
7
Saya tidak setuju. Ada skema di luar sana yang terlihat seperti URN dan yang menggunakan parameter kueri - seperti Bitcoin. URI tidak terbatas pada browser. Lihat en.wikipedia.org/wiki/URI_scheme . Pertanyaan ini juga dapat membahas kasus umum di mana pengkodean karakter diperlukan ketika browser mengakses pengendali protokol.
Gary Rowe
3
Berikan contoh URL ini atau tidak terjadi.
hakre
10
Di luar topik, tapi OK. Ini sumbangan pribadi saya Bitcoin URI: bitcoin: 1KzTSfqjF2iKCduwz59nv2uqh1W2JsTxZH? Jumlah = 0,5 & label = Agile% 20Stack. Perhatikan bahwa skema tersebut pada dasarnya adalah URN dengan parameter kueri, tetapi diserahkan ke penangan protokol. Jenis URI ini mungkin dapat mengambil manfaat dari solusi “utf8 = ✓” juga.
Gary Rowe
1
@GaryRowe Jadi, apakah Anda pernah mendapatkan sumbangan dari tautan itu?
Kyralessa

Jawaban:

814

Secara default, versi IE yang lebih lama (<= 8) akan mengirimkan data formulir dalam penyandian Latin-1 jika memungkinkan. Dengan memasukkan karakter yang tidak dapat diekspresikan dalam Latin-1, IE dipaksa untuk menggunakan pengkodean UTF-8 untuk pengiriman formulirnya, yang menyederhanakan berbagai proses backend, misalnya kegigihan basis data.

Jika parameternya bukan utf8=truemaka ini tidak akan memicu pengkodean UTF-8 di browser ini.

Gareth
sumber
8
@ LarsViklund Saya seharusnya lebih jelas dengan komentar saya. Maksud saya, validasi yang terkait dengan pengkodean karakter disederhanakan, bukan dilewati.
Gary Rowe
3
@ Lars Benar, itu tidak membebaskan Anda dari keharusan untuk memeriksa input Anda. Tetapi itu berarti bahwa penyandian tweak hanya menjadi bagian dari penanganan keamanan Anda dan tidak mencemari jalan "pemrosesan standar" Anda
Gareth
36
Lihat juga stackoverflow.com/questions/3222013/… . Rupanya Ruby on Rails digunakan untuk menggunakan karakter manusia salju, dan diubah menjadi tanda centang yang kurang ambigu tetapi kurang lucu.
Jack V.
11
@JohnLBevan itu diabaikan oleh pihak penerima, itu dilakukan tugasnya untuk memaksa browser untuk mengirim sesuatu dalam utf8 bukan latin1. Saya juga melihatnya sebagai = = that's (itu adalah titik kode 'tumpukan tumpukan', sepertinya itu tidak merender dalam komentar.)
cabbey
3
@ Gareth: Bisakah Anda mencadangkan pernyataan bahwa IE <= 8 formulir tidak mendukung dokumen dan / atau pengkodean formulir?
hakre