Mal*_*lax 11 http multipartform-data standards-compliance rfc
如果没有给出字符集,那么应该使用什么来解码multipart/form-data的默认编码?RFC2388规定:
4.5表单数据中的文本字符集
multipart/form-data的每个部分都应该具有内容类型.在字段元素是文本的情况下,文本的字符集参数表示使用的字符编码.
例如,带有文本字段的表单,其中用户键入"Joe owes <eu> 100",其中<eu>是欧元符号,表单数据可能返回为:
Run Code Online (Sandbox Code Playgroud)--AaB03x content-disposition: form-data; name="field1" content-type: text/plain;charset=windows-1250 content-transfer-encoding: quoted-printable>> Joe owes =80100. --AaB03x
在我的情况下,charset没有设置,我不知道如何解码该text/plain部分中的数据.因为我不想强制执行不是标准行为的事情,所以我在问这个案例中的预期行为是什么.RFC似乎没有解释这一点,所以我有点迷失.
谢谢!
小智 9
这显然在HTML5中有所改变(参见http://dev.w3.org/html5/spec-preview/constraints.html#multipart-form-data).
生成的multipart/form-data资源中与非文件字段对应的部分不得指定Content-Type标头.
那么指定的字符集在哪里?据我所知,编码算法中唯一的位置是名为_charset_的表单数据集条目.
如果您的表单没有名为_charset_的隐藏输入,会发生什么?我在Chrome 28中对此进行了测试,发送了一个用UTF-8编码的表格和一个用ISO-8859-1编写的表格,并检查发送的标题和有效负载,我没有看到任何地方都有字符集(即使文本编码肯定会改变).如果我在表单中包含一个空的_charset_字段,Chrome会使用正确的字符集类型填充该字段.我想任何服务器端代码都必须查找_charset_字段来解决它?
我在编写使用FormData对象的XMLHttpRequest.send的Chrome扩展时遇到了这个问题,无论源文档编码是什么,它总是以UTF-8编码.
让请求实体主体是运行multipart/form-data编码算法的结果,其中数据作为表单数据集并使用utf-8作为显式字符编码.
令mime类型为"multipart/form-data;"的串联,U + 0020 SPACE字符,"boundary =",以及由multipart/form-data编码算法生成的multipart/form-data边界字符串.
正如我之前发现的那样,在POST请求中的任何地方都没有指定charset = utf-8,除非你在表单中包含一个空的_charset_字段,在这种情况下会自动填充"utf-8".
这是我对事物状况的理解.我欢迎对我的假设进行任何更正!
| 归档时间: |
|
| 查看次数: |
10762 次 |
| 最近记录: |