POST数据将始终使用UTF-8字符集传输到服务器。 - jQuery.ajax docs
只有在使用带有jQuery(jQuery.post)或使用<form method=post>
的POST时才会发生这种情况吗?
答案 0 :(得分:2)
表单帖子的内容编码与声明的文档编码一致。例如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
提交表单时,默认编码为form-url-encoded。
XHR请求可以覆盖设置:
xhr.setRequestHeader('Content-Type','text/xml; charset=utf-8;');
因此,为了回答您的问题,可以在iso-8859-1中提交表单,但Ajax调用使用utf-8。请避免这种情况,否则您的服务器端代码会变得混乱。
答案 1 :(得分:1)
在HTML中,可以通过在表单上设置accept-charset
属性来设置字符集。如果未设置或给定值无效,则用户代理默认为文档的字符集,然后默认为UTF-8。 jQuery does it via setting the Content-Type
header on the request.
所有HTML表单都可能包含属性accept-charset
,正如HTML规范所述:
accept-charset
属性给出了要进行的字符编码 用于提交。如果指定,则该值必须是有序的 一组独特的空格分隔标记,对ASCII不区分大小写, 并且每个标记必须是对其中一个的ASCII不区分大小写的匹配 ASCII兼容字符编码的标签。
Source,两段以下的大蓝色东西。
您可能也对§4.10.22.5选择表单提交编码感兴趣,强调我的:
如果用户代理要为表单选择编码,则可选择使用 允许非ASCII兼容的编码标志设置,它必须运行 以下子步骤:
让input为表单元素的accept-charset属性的值。
让候选编码标签成为拆分输入的结果 空格。
让候选人编码为空字符编码列表。
依次为候选编码标签中的每个标记(按顺序排列) 它们是在输入中找到的,获得令牌的编码,如果 这不会导致失败,将编码附加到候选者 进行编码。
如果未设置allow non-ASCII-compatible encodings标志,请删除 任何与ASCII兼容的字符编码的编码 候选人编码。
如果候选编码为空,请返回UTF-8并中止这些步骤。
- 醇>
候选编码中的每个字符编码都可以表示有限 字符数。 (例如,UTF-8可以代表所有1.1 百万左右的Unicode代码点,而Windows-1252只能 代表256。)
对于候选编码中的每个编码,确定有多少个 表单数据集中条目的名称和值中的字符 编码可以表示(不忽略重复)。让max最多 最高的这样的数。 (对于UTF-8,max等于 表单数据中条目的名称和值中的字符 集。)
返回可编码max的候选编码中的第一个编码 表单数据中条目的名称和值中的字符 集。