HTML 5 规范描述了一种算法(algorithm),用于选择在多部分表单提交(例如 UTF-8)中要使用的字符编码。但是,不清楚所选编码应如何传递到服务器,以便可以在接收端正确解码内容。
通常,通过将“charset”参数附加到请求头
RFC 7578建议使用隐藏的“_charset_”表单字段来实现此目的。 然而,Safari(9.1)和Chrome(51)似乎都没有填充此字段,也没有提供任何每个部分的编码信息。
我查看了两个浏览器生成的请求头,没有看到任何明显的字符编码信息。 有人知道这些浏览器如何将此信息传达给服务器吗?
通常,通过将“charset”参数附加到请求头
Content-Type
的值来表示字符编码。然而,这个参数似乎没有为multipart/form-data
MIME类型定义。
https://www.rfc-editor.org/rfc/rfc7578#section-8
每个多部分表单提交中的部分都可以提供自己的Content-Type头; 然而,RFC 7578指出,“实际上,许多广泛部署的实现并没有在每个部分中提供charset参数,而是依赖于multipart / form-data实例的‘默认字符集’概念”。RFC 7578建议使用隐藏的“_charset_”表单字段来实现此目的。 然而,Safari(9.1)和Chrome(51)似乎都没有填充此字段,也没有提供任何每个部分的编码信息。
我查看了两个浏览器生成的请求头,没有看到任何明显的字符编码信息。 有人知道这些浏览器如何将此信息传达给服务器吗?
_charset_
,HTML的编写者和表单接收者(如果他们不是同一个人)需要在服务器端协调。accept-charset
应该只包含接收者准备处理的字符集。Web服务器应该配置为知道HTML提供的字符集。Web浏览器提交表单时只有两种方式可以传递字符集,即Content-Type
和_charset_
,但HTML 5禁止使用Content-Type
。 - Remy Lebeau