2

我有这个代码:

= link_to "unsubscribe instantly", "*|UNSUB|*".html_safe

这会生成这个 HTML:

<a href="*%7CUNSUB%7C*">unsubscribe instantly</a>

该| 字符被转义。那是行不通的,因为我将此 HTML 发送到应该*|UNSUB|*用取消订阅 url 替换的服务。

相反,我希望 Rails/HAML 生成这个:

<a href="*|UNSUB|*">unsubscribe instantly</a>

我去了http://haml-lang.com/try.html并输入 %a{:href => "*|UNSUB|*"} unsubscribe,输出是我所期望的。所以我猜这是Rails的事情。


更新:我在一个新的 Rails 3.1 应用程序上尝试了这个,管道没有被转义——这就是我想要的。我的主要 Rails 应用程序发生了一些奇怪的事情,导致 URL 被转义——现在进一步研究它。


更新:我想通了。我有一些 Rack 中间件正在运行类似的东西:

content = Nokogiri(response)
# ... processing
return content.to_html

这是对 URL 中的内容进行编码。我在这里问了一个相关的问题:防止 Nokogiri 在 URL 中转义字符

4

5 回答 5

1

这些真的逃脱了吗?我刚刚用 rails 3.0.3(编辑:和 rails 3.1.1)做了一个测试,这些:

= link_to 'unsubscribe instantly', '*|UNSUB|*'   
%a{:href => '*|UNSUB|*'} unsubscribe instantly
:plain
  <a href="*|UNSUB|*">unsubscribe instantly</a>

然后我在页面上使用 curl 管道似乎在那里,如下所示:

curl http://localhost:3000/about | grep UNSUB
<a href="*|UNSUB|*">unsubscribe instantly</a>
<a href='*|UNSUB|*'>unsubscribe instantly</a>
<a href="*|UNSUB|*">unsubscribe instantly</a>
于 2011-12-14T20:20:25.623 回答
1

我想到了。我有一些 Rack 中间件正在运行类似的东西:

content = Nokogiri(response)
# ... processing
return content.to_html

这是对 URL 中的内容进行编码。

于 2011-12-14T22:17:59.937 回答
0

我没有地方对此进行测试,但这可行吗?

- html = "<a href="*|UNSUB|*">unsubscribe instantly</a>"
= raw html
于 2011-12-14T19:10:58.820 回答
0

您是否尝试过跳过link_to并直接创建链接标签,例如

a{:href=>"*|UNSUB|*"} unsubscribe instantly
于 2011-12-14T18:52:24.693 回答
0

这对你有用吗:

=! link_to "unsubscribe instantly", "*|UNSUB|*"

(意识到它或多或少是等价的,但可能会有所不同)

于 2011-12-14T18:53:32.670 回答