例如,我想在HTTP响应中写入以下标题行:
Content-Disposition: attachment; filename="I can't believe it's not header!.jpg"
它包含一个混合的报价,重复报价不起作用(尽管是最干净的方法):
Header set always Content-Disposition "attachment; filename=""I can't believe it's not header!.jpg"""
它抛出错误Header has too many arguments
。
好老的反斜杠作品:
Header always set Content-Disposition "attachment; filename=\"I can't believe it's not header!.jpg\""
但是文档提供了反斜杠不转义的例子,所以我假设"a\b"
的解析和"a\\b"
一样,因为\b
不像\
和"
那样特殊。我们知道他们是怎么说假设的。我是不是太密集了?文档在哪里?
**更新:**我打开了a bug,因为我发现了其他奇怪的东西。
1条答案
按热度按时间h7wcgrx31#
反斜杠转义当然是Apache配置文件中转义字符的标准方法,因此,在本身由双引号分隔的字符串中使用反斜杠转义双引号当然是可行的方法。
Apache文档中介绍配置文件语法的页面并没有明确介绍这一点。(唯一提到反斜杠的地方是关于跨多行连续指令的--这是很少需要的。)
Apache docs for mod_log_config(a * 基 * 模块)的do状态:
应使用反斜杠对文字引号和反斜杠进行转义。
这就是参数(总是)用双引号括起来的地方。这同样适用于所有模块中的几乎所有字符串参数。
但是文档中提供了反斜杠不转义的例子,所以我假设
"a\b"
的解析与"a\\b"
相同,因为\b
并不像\
和"
那样特殊。我看不出你指的是哪里?你提供的链接好像没有这样的例子?
如果参数是 * 普通 * 字符串,则
"a\b"
将被视为“ab”(文字b
被不必要地转义)。"a\\b"
将为“a\b”(反斜杠本身被转义为文字反斜杠)。但是,如果参数采用正则表达式(正如Apache expressions 页面上的许多示例所做的那样),那么\b
本身就是一个特殊的元字符,它Assert一个字边界--没有反斜杠--在这种情况下转义。请注意,Apache配置文件中的参数只有在值包含 * 空格 * 时才需要用双引号括起来。Apache文档中的许多示例都包含双引号,但这不是必需的。空格本身通常可以用反斜杠转义(为了避免必须将参数用双引号引起来),但这往往是可读性较低。对于regex参数,通常更好的是使用
\s
代替(任何 * 空格 * 字符)。