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

私はそれを考え出した。次のようなものを実行しているRackミドルウェアがありました。

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

これは、URL内のものをエンコードしていました。

于 2011-12-14T22:17:59.937 に答える
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 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 に答える
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 に答える
0

これをテストする場所がありませんが、これは機能しますか?

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