Автоматически связывать URL-адреса и изображения в HTML-строке - PullRequest
6 голосов
/ 27 января 2011

Привет, у меня есть такая строка:

"<p class='video'>http://vimeo/2342343</p><p class='image'>http://nerto.it/logo.png</p><p class='text'>try to write</p><p class='video'>http://vimeo/2234923</p>"

Мне нужно преобразовать его в строку, подобную этой:

"<p class='video'><a href='http://vimeo/2342343'>http://vimeo/2342343</a></p><p class='image'><img src='http://nerto.it/logo.png' /></p><p class='text'>try to write</p><p class='video'><a href='http://vimeo/2234923'>http://vimeo/2234923</a></p>"

так, как я могу получить каждый элемент и преобразовать его?

спасибо

Ответы [ 6 ]

6 голосов
/ 27 января 2011

Вы можете использовать функцию автоматической ссылки для преобразования ссылок в фактические теги привязки.

auto_link(text_to_convert)

* Примечание: метод устарел или перемещен Этот метод устарел или перемещен в последнейстабильная версия.Последняя существующая версия (v3.0.9) показана в ссылке.

Если у вас есть более конкретные варианты использования, вы, вероятно, захотите использовать gsub с регулярным выражением.Например:

text.gsub(/\<p\s+class=\'image\'\>(.*?)\<\/p\>/, "<p class='image'><img src='\\1' /></p>")
5 голосов
/ 15 октября 2012

Функция auto_link была перемещена в отдельный гем здесь

5 голосов
/ 27 января 2011
html = "<p class='video'>http://vimeo/2342343</p>
        <p class='image'>http://nerto.it/logo.png</p>
        <p class='text'>try to write</p>
        <p class='video'>http://vimeo/2234923</p>"

linked = html.gsub( %r{http://[^\s<]+} ) do |url|
  if url[/(?:png|jpe?g|gif|svg)$/]
    "<img src='#{url}' />"
  else
    "<a href='#{url}'>#{url}</a>"
  end
end

puts linked
#=> <p class='video'><a href='http://vimeo/2342343'>http://vimeo/2342343</a></p>
#=> <p class='image'><img src='http://nerto.it/logo.png' /></p>
#=> <p class='text'>try to write</p>
#=> <p class='video'><a href='http://vimeo/2234923'>http://vimeo/2234923</a></p>
2 голосов
/ 27 января 2011

Вместо написания сложного регулярного выражения используйте Nokogiri. Решение ниже, преобразует ссылки и изображения отлично.

require 'rubygems'
require 'nokogiri'

#replace with your string
str = "...."

doc = Nokogiri::HTML.parse(str)
video_nodes = doc.css('.video')
video_nodes.each do |v|
  content = v.content
  link_node = Nokogiri::XML::Node.new('a',doc)
  link_node['href'] = content
  link_node.content = content 
  v.add_child(link_node)
end

img_nodes = doc.css('.image')

img_nodes.each do |img|
  content = img.content
  image_node = Nokogiri::XML::Node.new('img',doc)
  image_node['src'] = content
  img.add_child(image_node)
end
puts doc.to_html

0 голосов
/ 29 декабря 2013

Новый великий драгоценный камень, который я хочу предложить вам для преобразования всех ссылок из текста в ссылки, - gem link_url Это также работает для www, где нет такого драгоценного камня.

gem install link_url

Example 1: 
LinkUrl.convert('hello I am on www.stackoverflow.com')
Result => hello I am on <a href='http://www.stackoverflow.com'>www.stackoverflow.com</a>
Example 2:
LinkUrl.convert('hello I am on www.stackoverflow.com and my blog is http://www.clecotech.in')
Result => hello I am on <a href='http://www.stackoverflow.com'>www.stackoverflow.com</a> and my blog is <a href='http://www.clecotech.in'>http://www.clecotech.in</a>
0 голосов
/ 13 декабря 2013

Попробуйте этот простой лучший драгоценный камень преобразовать все ссылки из текста или строки в ссылки.Он также конвертирует URL-адрес изображения в тег изображения.

gem install url_link

string =  "Welcome to my website http://www.mywebsite.com"
url_link(format(string))
result => welcome to my website <a href='http://www.mywebsite.com'>http://www.mywebsite.com</a>

image_string = "http://blogspot.com/images/screenshot.png"
url_link(format(image_string))
result => <img src="http://blogspot.com/images/screenshot.png"/>

string = "Welcome to my website http://www.mywebsite.com see the picture http://media.smashingmagazine.com/images/introduction-to-rails/rails.jpg"
url_link(format(string))
result => welcome to my website <a href='http://www.mywebsite.com'>http://www.mywebsite.com</a>see the picture <img src="http://media.smashingmagazine.com/images/introduction-to-rails/rails.jpg"/>

Или попробуйте еще один

Помощник

def proper_url_link(url_link)
  unless url_link.blank?
   url_link.gsub( %r{(http|https)://[^\s<]+} ) do |url|
      if url[/(?:png|jpe?g|gif|svg)$/]
        "<img src='#{url}' />"
      else
        "<a href='#{url}' target='_blank'>#{url}</a> "
      end
    end
  end
end

def proper_html(html_format)
  unless html_format.blank?
    html_format.html_safe
  end
end

View

html = "<p class='video'>http://www.vimeo.com/2342343</p>

<=proper_html(proper_url_link(html))%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...