我有这段代码:
= 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
答案 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