2009-09-28 20 views
1

我有一个Rails工具模板:如何防止Builder模板在属性值中转义URL?

# in app/views/foos/index.xml.builder: 
xml.Module do |mod| 
    ... 
    mod.Content :type => 'url', 
      :href => foos_url(:bar => 'baz', 
          :yoo => 'hoo') 
end 

(它创建了一个OpenSocial的模块文件的XML,但是这并不重要)

的问题是,所呈现的XML看起来是这样的:

<Module> 
    ... 
    <Content type="url" href="http://myapp.com/foos?bar=baz&amp;amp;yoo=hoo"/> 
</Module> 

该URL后缀应该是“bar=baz&yoo=hoo”。我如何让Builder不再逃离amerpsand?

后来

可能网址后缀应该是“bar=baz&amp;yoo=hoo”的源XML的有效性规则,但绝对不应该是转义,应该吗?

回答

1

我知道我迟到了 - 但对于任何来自谷歌(像我一样)的人来说,诀窍就是向url_for添加一个:escape => false - 这样url只会被一次转义。

0

不,不应该,否则生成的XML文件将是无效的,正确的解析器将翻译& amp;解析文件时回到&。

编辑:nevermind,& amp;在第一条消息中被翻译成&。

+0

但有_two_“放大器”在那里 - &本身逃脱。这是不对的。 – 2009-09-28 20:25:06

2

我想这是因为XHTML要求被转义为&amp;(即使在URL中)的&并在您存储URL的XML需要这也给人一种双擒纵(&amp;amp;),将解码为&amp;的URL,这在HTML中是完全有效的(并且在XHTML中是必需的)。

例如,下面的代码是有效的XHTML链接到http://example.com/?a=b&c=d

<a href="http://example.com/?a=b&amp;c=d">link</a> 

所以我的猜测是,foos_url回报你已经包含&amp;的网址,然后再由你的XML模块逃脱。