Bất kỳ ký tự nào bạn có thể đưa vào tệp HTML [X] đều có thể đưa vào <input name>
. Như nhận xét của Allain nói, <input name>
được định nghĩa là chứaCDATA
, vì vậy những thứ duy nhất bạn không thể đưa vào đó là mã điều khiển và điểm mã không hợp lệ mà tiêu chuẩn cơ bản (SGML hoặc XML) không cho phép.
Allain đã trích dẫn W3 từ thông số kỹ thuật HTML4:
Ghi chú. Phương thức "get" hạn chế các giá trị tập dữ liệu biểu mẫu thành các ký tự ASCII. Chỉ phương thức "post" (với enctype = "multiart / form-data") được chỉ định để bao gồm toàn bộ bộ ký tự ISO10646.
Tuy nhiên, điều này không thực sự đúng trong thực tế.
Lý thuyết là application/x-www-form-urlencoded
dữ liệu không có cơ chế để chỉ định mã hóa cho tên hoặc giá trị của biểu mẫu, vì vậy việc sử dụng các ký tự không phải ASCII trong một trong hai ký tự "không được chỉ định" là hoạt động và bạn nên sử dụng POSTedmultipart/form-data
thay thế.
Thật không may, trong thế giới thực, không có trình duyệt nào chỉ định mã hóa cho các trường ngay cả khi về mặt lý thuyết, nó có thể, trong tiêu đề phần phụ của nội dung multipart/form-data
yêu cầu POST. (Tôi tin rằng Mozilla đã cố gắng triển khai nó một lần, nhưng đã bị lùi lại do nó làm hỏng máy chủ.)
Và không có trình duyệt nào triển khai tiêu chuẩn RFC2231 phức tạp và xấu xí đáng kinh ngạc cần thiết để chèn các tên trường không phải ASCII được mã hóa vào tiêu đề phần phụ của nhiều phần. Trong mọi trường hợp, thông số HTML xác định multipart/form-data
không trực tiếp nói rằng RFC2231 nên được sử dụng và một lần nữa, nó sẽ phá vỡ các máy chủ nếu bạn cố gắng.
Vì vậy, thực tế của tình huống là không có cách nào để biết mã hóa nào đang được sử dụng cho các tên và giá trị trong một lần gửi biểu mẫu, bất kể đó là loại biểu mẫu nào. Trình duyệt sẽ làm gì với tên trường và giá trị chứa các ký tự không phải ASCII giống nhau đối với GET và cả hai loại biểu mẫu POST: nó mã hóa chúng bằng cách mã hóa trang chứa biểu mẫu được sử dụng. Các tên biểu mẫu GET không phải ASCII không bị phá vỡ nhiều hơn mọi thứ khác.
DLH:
Vậy tên có kiểu dữ liệu khác với các phần tử khác?
Trên thực tế, phần tử duy nhất có name
thuộc tính không phải CDATA
là <meta>
. Xem danh sách thuộc tính của thông số kỹ thuật HTML4 để biết tất cả các cách sử dụng khác nhau của name
; đó là một tên thuộc tính quá tải, có nhiều ý nghĩa khác nhau trên các phần tử khác nhau. Đây thường được coi là một điều xấu.
Tuy nhiên, thông thường những ngày này bạn sẽ tránh name
ngoại trừ trên các trường biểu mẫu (nơi đó là tên điều khiển) và param
(khi đó là mã nhận dạng tham số cụ thể của plugin). Đó chỉ là hai ý nghĩa để vật lộn với nhau. Nên tránh sử dụng kiểu cũ name
để xác định các phần tử như <form>
hoặc <a>
trên trang ( id
thay vào đó hãy sử dụng ).
name
có một kiểu dữ liệu<input>
khác với các phần tử khác? Hấp dẫn.