2009-09-28 50 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模塊逃脫。