2

我有一个 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;amp;yoo=hoo"/>
</Module>

该 URL 后缀应为“ bar=baz&yoo=hoo.”。如何防止 Builder 逃逸符号?

之后

在 XML 有效性规则的源代码中,URL 后缀可能应该是“ bar=baz&amp;yoo=hoo”,但它当然不应该被双重转义,不是吗?

4

3 回答 3

2

我猜这是因为XHTML需要&将在 XHTML 中是强制性的)。&amp;&amp;amp;&amp;

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

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

所以我的猜测是它会foos_url返回一个已经包含 a 的 url &amp;,然后它会被你的 XML 模块再次转义。

于 2009-09-28T20:33:24.260 回答
2

我知道我在这里迟到了——但对于从谷歌进来的人(比如我)来说,诀窍是在 url_for 中添加一个 :escape => false ——这样 url 只会被转义一次。

于 2010-07-18T16:57:32.160 回答
0

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

编辑:没关系,& 在第一条消息中被翻译成 &。

于 2009-09-28T20:18:48.770 回答