2011-03-31 33 views
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。然而,QWebPluginFactory对待data属性作为人类可读的URI(未逸出),并且导致双编码百分比。我想知道它是否是QWebPluginFactory的错误。

回答

1

data attribute希望该值是一个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与权威信息,我们需要看一看路径abempty(见URI production rule):

path-abempty = *("/" segment) 

是零个或多个PChar类型被定义为字符如下(我已经扩大了生产规则):

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

正如你所看到的,PChar类型扩展到字面值,。因此,您不需要在路径组件中编码,。但是由于您可以使用百分比编码对任何非分界字符进行编码而不更改其含义,因此可以使用%2C而不是,

+0

接受这个答案,因为它指出了最重要的事情:'data'属性是根据规范的URI。 – 2011-05-04 04:10:47

0

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

在您的例子编码的字符是一个逗号(,),这在一些规范保留字符,所以它是没有错编码。

大多数网络服务器应equaly处理未编码和编码的逗号,但可以有一些不这样做,这取决于它们的配置。由于这样做通常是一个好主意,首先避免在文件名中包含特殊字符(如您在示例中所示)。当你在GET参数的特殊字符总是需要

URL编码。例如是支持采取C&A作为一种价值已被写入作为GET参数:

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

编辑:

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

+0

实际上,我对浏览器插件使用'data'属性期望看到的规范感兴趣。我会扩展我的问题。 – 2011-04-01 04:54:12