POST数据将始终使用UTF-8字符集传输到服务器

时间:2014-03-05 04:30:14

标签: javascript jquery forms post

  

POST数据将始终使用UTF-8字符集传输到服务器。 - jQuery.ajax docs

只有在使用带有jQuery(jQuery.post)或使用<form method=post>的POST时才会发生这种情况吗?

2 个答案:

答案 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兼容的编码标志设置,它必须运行   以下子步骤:

     
      
  1. 让input为表单元素的accept-charset属性的值。

  2.   
  3. 让候选编码标签成为拆分输入的结果   空格。

  4.   
  5. 让候选人编码为空字符编码列表。

  6.   
  7. 依次为候选编码标签中的每个标记(按顺序排列)   它们是在输入中找到的,获得令牌的编码,如果   这不会导致失败,将编码附加到候选者   进行编码。

  8.   
  9. 如果未设置allow non-ASCII-compatible encodings标志,请删除   任何与ASCII兼容的字符编码的编码   候选人编码。

  10.   
  11. 如果候选编码为空,请返回UTF-8并中止这些步骤。

  12.   
  13. 候选编码中的每个字符编码都可以表示有限   字符数。 (例如,UTF-8可以代表所有1.1   百万左右的Unicode代码点,而Windows-1252只能   代表256。)

         

    对于候选编码中的每个编码,确定有多少个   表单数据集中条目的名称和值中的字符   编码可以表示(不忽略重复)。让max最多   最高的这样的数。 (对于UTF-8,max等于   表单数据中条目的名称和值中的字符   集。)

         

    返回可编码max的候选编码中的第一个编码   表单数据中条目的名称和值中的字符   集。

  14.   

Source