2

我需要允许用户提交如下查询;

/search/"my search string"

但由于请求验证而失败,如以下 2 个问题所述:

如何包含引号字符作为路由参数?收到“路径中的非法字符”消息

如何修改请求验证?

我目前正在尝试弄清楚如何禁用引号字符的请求验证,但我想知道在我实际启用该禁用的站点之前的风险?我不会禁用请求验证,除非我只能对引号字符禁用它,所以我打算禁止当前不允许的所有其他字符。

4

1 回答 1

3

根据 URI 通用语法规范 ( RFC 2396 ),双引号字符被明确排除并且必须转义(即%22)。请参阅第 2.4.3 节。规范中给出的原因:

尖括号“<”和“>”以及双引号 (") 字符被排除在外,因为它们经常在文本文档和协议字段中用作 URI 周围的分隔符。

您可以很容易地看到为什么会这样——想象一下尝试在 HTML 中创建指向您的 URL 的链接:

<a href="http://somesite/search/"my search string""/>

这将使 HTML 解析失败(并且还会破坏 SO 的语法突出显示)。您也将无法使用 URL 进行基本操作,例如通过电子邮件将其发送给某人(电子邮件客户端不会正确解析 URL)、将其发布在留言板上、在即时消息中发送等。

对于它的价值,空格也被明确排除(RFC 的同一部分解释了原因)。

于 2010-11-02T12:28:06.257 回答