Czy użycie „utf8 = ✓” jest lepsze niż „utf8 = true”?

569

Ostatnio widziałem kilka identyfikatorów URI zawierających parametr zapytania „utf8 = ✓”. Moje pierwsze wrażenie (po pomyśle „mmm, wygląda świetnie”) było takie, że można go użyć do wykrycia zepsutego kodowania znaków.

Czy jest to lepszy sposób na rozwiązanie potencjalnych problemów z kodowaniem znaków, czy może programista dobrze się bawi?

Gary Rowe
źródło
7
Nie zgadzam się. Istnieją schematy, które wyglądają jak URN i pobierają parametry zapytania - takie jak Bitcoin. Identyfikatory URI nie są ograniczone do przeglądarek. Zobacz en.wikipedia.org/wiki/URI_scheme . To pytanie może również dotyczyć ogólnego przypadku, gdy kodowanie znaków jest wymagane, gdy przeglądarka uzyskuje dostęp do procedury obsługi protokołu.
Gary Rowe,
3
Podaj przykłady tych adresów URL lub tak się nie stało.
hakre
10
Nie na temat, ale OK. Oto moja osobista darowizna URI Bitcoin: bitcoin: 1KzTSfqjF2iKCduwz59nv2uqh1W2JsTxZH? Kwota = 0,5 i etykieta = Zwinny% 20Stack. Zauważ, że schemat jest w zasadzie URN z parametrami zapytania, ale przekazuje obsługę protokołu. Ten rodzaj identyfikatora URI prawdopodobnie mógłby również skorzystać z obejścia „utf8 = ✓”.
Gary Rowe,
1
@GaryRowe Czy otrzymałeś kiedyś jakieś darowizny z tego linku?
Kyralessa

Odpowiedzi:

814

Domyślnie starsze wersje IE (<= 8) przesyłają dane formularza w kodowaniu Latin-1, jeśli to możliwe. Uwzględniając znak, którego nie można wyrazić w Latin-1, IE jest zmuszony używać kodowania UTF-8 do przesyłania formularzy, co upraszcza różne procesy zaplecza, na przykład trwałość bazy danych.

Jeśli zamiast utf8=truetego parametr byłby ustawiony, nie uruchomiłoby to kodowania UTF-8 w tych przeglądarkach.

Gareth
źródło
8
@LarsViklund Powinienem być jaśniejszy z moim komentarzem. Miałem na myśli, że sprawdzanie poprawności związane z kodowaniem znaków jest uproszczone, a nie pomijane.
Gary Rowe,
3
@ Lars Prawidłowo, nie zwalnia Cię to z konieczności sprawdzania swoich danych wejściowych. Ale to oznacza, że ​​poprawki kodowania stają się tylko częścią obsługi bezpieczeństwa i nie zmieniają koncepcji ścieżki „standardowego przetwarzania”
Gareth,
36
Zobacz także stackoverflow.com/questions/3222013/… . Najwyraźniej Ruby on Rails używał postaci bałwana i został zmieniony na znacznik wyboru, który był mniej dwuznaczny, ale mniej zabawny.
Jack V.
11
@JohnLBevan jest ignorowany przez odbierający, wykonał zadanie, aby zmusić przeglądarkę do wysyłania rzeczy w utf8 zamiast latin1. Widziałem to również jako ie = 💩 (to jest punkt kodu „kupa kupy”, wygląda na to, że nie wyświetla się w komentarzach).
cabbey,
3
@Gareth: Czy możesz wykonać kopię zapasową stwierdzenia, że ​​formularze IE <= 8 nie obsługują dokumentu i / lub kodowania formularzy?
hakre