Wrap links in text within hyperlinks - Ruby On Rails -
i have description news. display news text, used simple_format wraps new lines <p></p> tags.
however, news text may contain links. need wrap links within text <a></a> tags.
it helpful if give insights on how that.
sample text:
lorem ipsum dolor sit amet, consectetur adipisicing elit. ad, ea esse magni obcaecati quasi quis soluta velit. accusamus doloribus ea et ex officia, pariatur quia saepe sed tempore temporibus totam https://stackoverflow.com/posts/36058019/edit
desired output:
lorem ipsum dolor sit amet, consectetur adipisicing elit. ad, ea esse magni obcaecati quasi quis soluta velit. accusamus doloribus ea et ex officia, pariatur quia saepe sed tempore temporibus totam? <a src="https://stackoverflow.com/posts/36058019/edit">https://stackoverflow.com/posts/36058019/edit</a>
my approach
for solved following function. first split string newlines ensure simple_format insert appropriate p tags. then, match texts url regex , wrap within a tag.
def parse_text(text) text.split("\n").map |t| t.split(' ').map {|x| x.match(/https?:\/\/[\s]+/) ? "<a href=#{x}>#{x}</a>" : x }.join(' ') end.join("\n").html_safe end
as @devanand commented it's better if wrap text in desired tags , use html_safe
but required wrap urls text within <a> tag.
> str = "lorem ipsum dolor sit amet, consectetur adipisicing elit. ad, ea esse magni obcaecati quasi quis soluta velit. accusamus doloribus ea et ex officia, pariatur quia saepe sed tempore temporibus totam https://stackoverflow.com/posts/36058019/edit" # extract urls string > urls = uri.extract(str) # wrap url text within <a> tag > urls.each{|u| str.gsub!(u, "<a src='#{u}'>#{u}</a>")} > puts str #=> "lorem ipsum dolor sit amet, consectetur adipisicing elit. ad, ea esse magni obcaecati quasi quis soluta velit. accusamus doloribus ea et ex officia, pariatur quia saepe sed tempore temporibus totam <a src='https://stackoverflow.com/posts/36058019/edit'>https://stackoverflow.com/posts/36058019/edit</a>" demo
note: rsb commented uri.extract won't work if there's no spaces @ beginning , end of url
Comments
Post a Comment