我有一个Rails Builder模板:
# 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;yoo=hoo"/>
</Module>
该网址后缀应为“bar=baz&yoo=hoo
”。如何防止Builder逃离amerpsand?
后来
在XML有效性规则的源代码中,URL后缀可能应为“bar=baz&yoo=hoo
”,但当然不应该 double -escaped,是吗?
答案 0 :(得分:2)
我想这是因为XHTML要求将&
转义为&
(即使在网址中),而存储网址的XML也需要这样做,并提供双重转义({{1} })将解码为URL中的&amp;
,这在HTML中是完全有效的(在XHTML中是强制的)。
例如,以下代码是链接到&
的有效XHTML:
http://example.com/?a=b&c=d
所以我的猜测是<a href="http://example.com/?a=b&c=d">link</a>
会返回一个已包含foos_url
的网址,然后再由您的XML模块转义。
答案 1 :(得分:1)
我知道我已经迟到了 - 但对于任何从谷歌(像我这样)进来的人来说,诀窍是添加:escape =&gt;对url_for为false - 这样,url只会被转义一次。
答案 2 :(得分:0)
不,不应该,否则生成的XML文件将无效,正确的解析器将翻译&amp; amp;回到&amp;解析文件时。
编辑:nevermind,&amp; amp;被翻译成&amp;在第一条消息中。