Każdy znak, który można umieścić w pliku HTML [X], można umieścić w pliku <input name>
. Jak mówi komentarz Allaina, <input name>
jest definiowany jako zawierającyCDATA
, więc jedyne rzeczy, których nie możesz tam umieścić, to kody kontrolne i nieprawidłowe punkty kodowe, których podstawowy standard (SGML lub XML) nie zezwala.
Allain zacytował W3 ze specyfikacji HTML4:
Uwaga. Metoda „get” ogranicza wartości zestawu danych formularza do znaków ASCII. Określono tylko metodę „post” (z enctype = „multipart / form-data”) w celu pokrycia całego zestawu znaków ISO10646.
Jednak w praktyce nie jest to prawdą.
Teoria mówi, że application/x-www-form-urlencoded
dane nie mają mechanizmu do określania kodowania nazw lub wartości formularza, więc użycie znaków spoza zestawu ASCII w jednym z nich jest „nieokreślone” jako działające i multipart/form-data
zamiast tego należy użyć metody POST .
Niestety w prawdziwym świecie żadna przeglądarka nie określa kodowania pól, nawet jeśli teoretycznie by to możliwe, w nagłówkach podpunktu multipart/form-data
treści żądania POST. (Myślę, że Mozilla próbowała go raz zaimplementować, ale wycofała się, ponieważ zepsuła serwery).
Żadna przeglądarka nie implementuje zadziwiająco złożonego i brzydkiego standardu RFC2231, który byłby niezbędny do wstawiania zakodowanych nazw pól innych niż ASCII do nagłówków części wieloczęściowej. W każdym razie specyfikacja HTML, która definiuje multipart/form-data
, nie mówi bezpośrednio, że należy użyć RFC2231, i ponownie, jeśli spróbujesz, zepsuje serwery.
W rzeczywistości sytuacja jest taka, że nie ma sposobu, aby dowiedzieć się, jakie kodowanie jest używane dla nazw i wartości w przesłanym formularzu, bez względu na typ formularza. To, co przeglądarki zrobią z nazwami pól i wartościami, które zawierają znaki inne niż ASCII, jest takie samo dla GET i obu typów formularza POST: koduje je przy użyciu kodowania strony zawierającej użyty formularz. Nazwy formularzy GET spoza ASCII nie są bardziej zepsute niż wszystko inne.
DLH:
Czyli nazwa ma inny typ danych niż dla innych elementów?
Właściwie jedynym elementem, którego name
atrybutem nie CDATA
jest, jest <meta>
. Zobacz listę atrybutów specyfikacji HTML4 dla wszystkich różnych zastosowań name
; jest to przeciążona nazwa atrybutu, mająca wiele różnych znaczeń dla różnych elementów. Jest to ogólnie uważane za złe.
Jednak zazwyczaj w dzisiejszych czasach należy unikać name
z wyjątkiem pól formularza (gdzie jest to nazwa kontrolki) i param
(gdzie jest to identyfikator parametru specyficzny dla wtyczki). To tylko dwa znaczenia, z którymi trzeba się zmagać. Należy unikać starodawnego stosowania name
znaku do identyfikowania elementów, takich jak <form>
lub <a>
na stronie (użyj id
zamiast tego).
name
ma inny typ danych dla<input>
niż dla innych elementów? Ciekawy.