2016-05-24 24 views
0

Ich bin Ruby 2.3.1p112 und ich versuche, String-Interpolation zu verwenden, um eine Image-Link zu erzeugen. Es entgeht jedoch fälschlicherweise die Verknüpfung src wie folgt: src = \ "http://localhost:3000/t \". Das Beispiel ist unten dargestellt:Ruby String-Interpolation zum Hinzufügen von Bild zu einer Verknüpfung Präfixe einen Schrägstrich zum Bild src

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

Dies ist nicht der Code-Ansicht; es geschieht auf dem Back-End und hier wird die Klasse extrahiert und vereinfacht das Problem

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 

Sie es reproduzieren kann zu zeigen, indem Sie den Code unten in irb läuft:

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

Wenn Sie den Code oben ausgeführt sehen, werden Sie, dass die setzt Anweisung protokolliert die richtige Sache und das Bild src ist:

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

Aber ohne die Anweisung puts th e Bild src mit entkam Anführungszeichen: 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> 

Was ist der beste Weg, um das Zitat entweicht in dem Bild src zu entfernen?

+0

Mit "Schrägstrich-Präfix" Sie "Backslash Suffix" bedeuten? – Stefan

Antwort

2

Es gibt keinen Backslash. Dein Code funktioniert einwandfrei.

Sie können es reproduzieren, indem Sie den Code unten in irb

läuft

Versuchen Sie, diese in irb:

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

Alles, was Sie sehen, ist, dass, wenn sie direkt eine variable Ausgabe irb ist Anzeige der rohen Zeichenkette Und da die Zeichenkette durch " Zeichen abgeschlossen ist, ist es notwendig, alle " Zeichen in der Ausgabe bei der Anzeige zu entkommen.

Wenn die Zeichenfolge wirklich hat wörtliche Schrägstriche enthalten, was Sie sehen würden, statt

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

sein würde:

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