如何告诉Rails / HAML不要转义URL?

时间:2011-12-14 18:46:59

标签: ruby-on-rails escaping haml html-escape-characters

我有这段代码:

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

生成此HTML:

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

|字符被转义。这不起作用,因为我将此HTML发送到应该用取消订阅网址替换*|UNSUB|*的服务。

相反,我希望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中的内容进行编码。我在这里问了一个相关的问题:Preventing Nokogiri from escaping characters in URLs

5 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

我明白了。我有一些运行类似的Rack中间件:

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

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

答案 2 :(得分:0)

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

a{:href=>"*|UNSUB|*"} unsubscribe instantly

答案 3 :(得分:0)

这对你有用:

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

(意识到它或多或少等同,但可能会产生差异)

答案 4 :(得分:0)

我没有地方可以测试这个,但这会有用吗?

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