引用的MIME媒体类型参数允许转义引号吗?

6

对于互联网MIME媒体类型(RFC 6838),参数可以被引用(RFC 2045)。例如,以下表示值为foobar

text/plain;test="foobar"

但是我可以在引号参数内包含转义的引号吗?以下内容表示值为foo"bar
text/plain;test="foo\"bar"

如果是这样,那么转义字符的转义怎么办?以下内容将表示值为foo\bar:
text/plain;test="foo\\bar"

任意转义字符怎么处理?以下内容表示值为fooxbar,因为转义序列\x只表示x
text/plain;test="foo\xbar"

同样重要的是,哪个标准定义了这个?

我猜至少允许转义引号和转义反斜杠,但我很难找到规定的地方。


我希望这些内容受到通用的RFC5322语法的控制。然而,无论RFC如何规定,我都不认为非常规变化能够在客户端上可靠地工作。 - tripleee
@tripleee,感谢您提到另一个RFC,但除此之外,我必须说我不明白您的回复怎么可能更加模糊。我的意思是字面上的。您的回复中没有任何具体细节,如果我想让这个句子更加模糊,我不知道该怎么做,除了删除实际的RFC编号。 - Garret Wilson
那么让我重新表述一下。弄清楚RFC到底规定了什么并不会真正有用。你需要遵循的事实上标准是由糟糕的邮件客户端和浏览器设定的互操作性标准。如果这是你的目标,我不会期望任何类似转义的东西能够可靠地工作,无论RFC是否支持。你实际上希望实现什么? - tripleee
1
这种问题并不新鲜。它也不是什么奇怪、无法逃避的困境。1)你首先要看一下正式标准,如果可以的话就实现它。2)你需要权衡一下是否有某些实践或事实上的标准具有如此重要的作用,以至于值得偏离正式标准。我们在HTTP、HTML、CSS或其他方面都这样做了,而且已经这样做了几十年了。我的问题只是第一个:哪个标准管辖这个问题,它说了什么。你可以把回答2作为额外的奖励。你指出RFC 5322适用,但没有告诉我它给出了什么规则。 - Garret Wilson
1
“弄清楚RFC确切规定并不实用。”我们完全不同意。 RFC或其他标准是“起点”。我正在试图找到起点。我希望知道实践的不同之处。但是@tripleee告诉我既不是标准说什么,也不是实践有什么不同之处;相反,你抱怨问题并哀叹提问的无用性。 - Garret Wilson
显示剩余2条评论
1个回答

4
我还没有完整的答案,但我知道WhatWG说MIME类型参数值必须包含HTTP引用字符串令牌代码点。尽管它提供了自己的定义,但WhatWG参考了RFC 7230§3.2.6.字段值组件,该标准允许几乎任何转义:
quoted-string  = DQUOTE *( qdtext / quoted-pair ) DQUOTE
qdtext         = HTAB / SP /%x21 / %x23-5B / %x5D-7E / obs-text
obs-text       = %x80-FF
quoted-pair    = "\" ( HTAB / SP / VCHAR / obs-text )

然而,它指出:

发送方在引用字符串中不应该生成引用对,除非必要引用该字符串中出现的双引号和反斜杠八位元组。

还要注意RFC 5322 § 3.2.1. 引用字符也有一些规则。控制媒体类型的RFC 6838提到了RFC 6532 § 3.2. RFC 5322的语法扩展, 尽管在参数值的上下文中并不明确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接