2016-05-24 8 views
0

Ruby 2.3.1p112を使用していますが、文字列補間を使用して画像リンクを作成しようとしています。しかし、間違ってこのようなリンクのsrc引用符をエスケープします。src = \ "http://localhost:3000/t \"例を以下に示します。リンクに画像を追加するためのRuby文字列補間画像にスラッシュを接頭辞src

<a href=www.google.com target='_blank'> google.com \"<img src=\"http://localhost:3000/t\" width='1' height='1'>\"</a> 

これはビューコードではありません。あなたはIRBに以下のコードを実行することによってそれを再現することができ、それは、バックエンドで発生し、ここでのクラスが出て抽出し、問題

class Link 
    require 'uri' 

    def self.link_name(url) 
    uri = URI.parse(url) 
    uri = URI.parse("http://#{url}") if uri.scheme.nil? 
    host = uri.host.downcase 
    host.start_with?('www.') ? host[4..-1] : host 
    end 

    def self.url_regex 
    /(http:|www.)[a-zA-Z0-9\/:\.\?]*/ 
    end 

    def self.link_image(e) 
    email = ['[email protected]', '[email protected]'] 
     email.map do |p| 
     token = new.generate_email_click_tracking_img 
     e.gsub(url_regex) do |url| 

     puts "token inloop is <a href=#{url}>#{link_name(url)} #{token} </a>" 

     "<a href=#{url} target='_blank'> #{link_name(url)} \"#{token}\"</a>" 
     end 
    end 
    end 

    def generate_email_click_tracking_img 
    url = "http://localhost:3000/t" 
    "<img src=\"#{url}\" width='1' height='1'>" 
    end 

end 

を示すように簡略化されています

a = "me in www.google.com, you in http://www.facebook.com" 
Link.link_image(a) 

あなたは上記のコードを実行した場合

<a href=http://www.facebook.com>facebook.com <img src="http://localhost:3000/t" width='1' height='1'> </a> 

しかしプット声明番目なし:、あなたは文を置くが正しいことを記録し、画像のsrcがあることがわかりますE画像SRCは、エスケープ引用符で囲まれています。http:// localhost:3000/T \」

<a href=http://www.facebook.com target='_blank'> facebook.com \"<img src=\"http://localhost:3000/t\" width='1' height='1'>\"</a> 

画像SRCに引用エスケープを削除するための最良の方法は何ですか?

+0

あなたは「バックスラッシュ接尾辞」を意味する「スラッシュ接頭辞」で? – Stefan

答えて

2

バックスラッシュはありません。あなたのコードは正常に動作しています。

あなたはIRB

に以下のコードを実行することによって、それを再現することができますがirbでこれを実行してみてください:

puts '"hello"' 
# => "hello" 
'"hello"' 
# => "\"hello\"" 

あなたが見ているすべての変数を直接出力する際に​​、irbがあるということです生の文字列を表示します。文字列は"文字で終了するため、表示されたときには、出力内にある"文字をエスケープする必要があります。

本当に文字列がリテラルバックスラッシュが含まれていなければ、あなたが代わりに

<a href=http://www.facebook.com target='_blank'> facebook.com \"<img src=\"http://localhost:3000/t\" width='1' height='1'>\"</a> 

を見るであろうことは、次のようになります。

<a href=http://www.facebook.com target='_blank'> facebook.com \\\"<img src=\\\"http://localhost:3000/t\\\" width='1' height='1'>\\\"</a> 
関連する問題