2013-10-30 13 views
8

Tôi gặp khó khăn khi hiểu cách đặt bộ ký tự khi loại nội dung không phải là văn bản/html, văn bản/đồng bằng hoặc text/xml, thay vào đó là kiểu nội dung ứng dụng/x-www-form-urlencoded.ajax, setRequestHeader(), Loại nội dung, ứng dụng/x-www-form-urlencoded và charset

Với này (giản thể) mã javascript:

var xhr = new XMLHttpRequest(); 

Nếu tôi không rõ ràng thiết lập mã hóa,

xhr.open('POST', 'serv.php', true); 
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 

firebug nói với tôi rằng kiểu nội dung là "application/x -www-form-urlencoded; charset = UTF-8. "

Nếu tôi đặt charset ISO-8859-1 ví dụ,

xhr.open('POST', 'serv.php', true); 
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1'); 

firebug vẫn nói với tôi "application/x-www-form-urlencoded; charset = UTF-8 . "

Nếu tôi cố gắng một cái gì đó giống như

xhr.setRequestHeader('Content-Type', 'text/plain; charset=ISO-8859-1'); 

sau đó nó tôn trọng charset.

Trong tất cả các trường hợp send() phương pháp đi như thế này:

xhr.send('id=9&name=Yoda'); 

Tại sao nó không tôn vinh những charset tôi chỉ định nếu Content-Type là x-www-form-urlencoded?

LƯU Ý: Tôi đang sử dụng ISO-8859-1 như một ví dụ. Mục tiêu của tôi là để hiểu những gì đang xảy ra.

Trả lời

11

Loại mime application/x-www-form-urlencoded không hỗ trợ thông số (chẳng hạn như charset). Nếu bạn nhìn vào số this section của thông số HTML5, bạn sẽ thấy bảng mã được xác định như thế nào (nó phức tạp). Đặc biệt, có một lưu ý ở dưới cùng của phần đề cập đến cách không thể chỉ định bộ ký tự làm thông số cho loại mime.

Các vấn đề liên quan