0

假设我的 Web 应用程序呈现以下标签:

<object type="application/x-pdf" data="http://example.com/test%2Ctest.pdf">
     <param name="showTableOfContents" value="true" />
     <param name="hideThumbnails" value="false" />
</object>

应该data转义属性(百分比编码路径)还是不转义?在我的例子中是这样。我没有找到任何规范。

附录

实际上,我对浏览器插件消费data属性的规范很感兴趣。例如,Adobe Acrobat 插件采用转义和非转义 uri。但是,QWebPluginFactorydata属性视为人类可读的 URI(未转义),这会导致双百分比编码。我想知道这是否是一个错误QWebPluginFactory

4

2 回答 2

1

data属性期望值是一个 URI。因此,您应该提供一个语法上有效的 URI 值。

URI 的当前规范是RFC 3986。要查看,URI 的路径中的 是否需要编码,请查看路径生成规则是如何定义的:

path          = path-abempty    ; begins with "/" or is empty
              / path-absolute   ; begins with "/" but not "//"
              / path-noscheme   ; begins with a non-colon segment
              / path-rootless   ; begins with a segment
              / path-empty      ; zero characters

由于我们有一个带有权限信息的 URI,我们需要看一下path-abempty(参见URI生产规则):

path-abempty  = *( "/" segment )

是零个或多个pchar字符,定义如下(我已经扩展了生产规则):

pchar         = ALPHA / DIGIT / "-" / "." / "_" / "~" / "%" HEXDIG HEXDIG / "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" / ":" / "@"

如您所见,pchar扩展为文字,. 所以你不需要,路径组件中编码。但是由于您可以使用百分比编码对任何非定界字符进行编码而不改变其含义,因此可以%2C使用,.

于 2011-04-01T10:34:33.300 回答
0

URL 通常只能包含特定字符。不幸的是,不同的规范包含不同的字符列表,这些字符被认为是保留的,因此不能使用。

在您的示例中,编码字符是逗号 ( ,),在某些规范中它是保留字符,因此对其进行编码并没有错。

大多数网络服务器应该平等地处理未编码和编码的逗号,但是根据它们的配置,可能有一些不这样做。因此,首先避免在文件名中包含特殊字符(如您在示例中所使用的)通常是一个好主意。

当 GET 参数中有特殊字符时,总是需要 URL 编码。例如,支持C&A作为值的 GET 参数必须写为:

http://example.com/somescript.php?value=C%26A

编辑:

插件(甚至浏览器)都不在乎。他们不会尝试(或不需要)解码它或类似的东西。他们只是请求从服务器输入的 URL。

于 2011-03-31T11:15:45.447 回答