5

使用 Ruby/Rails 是否有人知道如何获取可能包含一些 HTML 元素的大字符串并将它们变成链接?

这是一个例子:

"Check out my video on you tube http://youtu.be/OkCcD6cOKgs"

我正在寻找可以将 HTML 转换为有效的可点击链接<a href ...但也保留其他文本不变的东西,就像这个问题一样。

4

5 回答 5

8

我知道为时已晚,但是如果有人仍然有这个问题,那么他可以这样做。

text = "Check out my video on you tube http://youtu.be/OkCcD6cOKgs"
html_text = text.gsub(URI.regexp, '<a href="\0">\0</a>').html_safe

这是我从这里Ruby 找到的最好方法:使纯文本链接到现在为止可点击。

于 2018-02-09T07:47:16.003 回答
5

Rails 曾经有一个内置的“auto_link”功能,现在可以作为一个'autolink' gem引入。这也会进行其他字符串清理。

或者,“锚定”宝石更专注于这一任务。

没有宝石,这是我使用的红宝石代码:

  url_regexp = %r{
    (?:(?:https?|ftp|file):\/\/|www\.|ftp\.)
    (?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|
         [-A-Z0-9+&@#\/%=~_|$?!:,.])*
    (?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|
          [A-Z0-9+&@#\/%=~_|$])
  }ix

  text = text.gsub(url_regexp, '<a href="\0">\0</a>').html_safe

我建议您使用任何解决方案仔细测试一些边缘情况。环顾四周寻找答案,您会发现有人推荐核心库URI.regexpURI::DEFAULT_PARSER,但这无法通过非常简单的测试。尝试在文本中包含一个单词,后跟一个冒号 ':' 字符。您不希望它成为链接!(我真的不知道为什么这个内置的解决方案这么差。我猜它更多的是用于验证而不是查找类似 URL 的子字符串)

所以我上面的解决方案是一个基于这个答案的正则表达式,并转换为更红宝石。但是当你开始寻找时,那里有许多不同的 URL 正则表达式。您可以玩寻找任何给定正则表达式失败的尴尬边缘情况的游戏。通常较长的正则表达式会捕获更多的边缘情况。但是将其转换为在 ruby​​ 中工作也存在挑战。该网站提供了许多语言解决方案,包括一个(相当长的)ruby 示例:http ://urlregex.com

于 2019-11-26T16:51:08.247 回答
0

按最后一个分隔符拆分:如何通过拆分字符的最后一次出现将字符串拆分为两部分?

text, uri = "Check out my video on you tube http://youtu.be/OkCcD6cOKgs".split(/ (?=\S+$)/)

<%= link_to text, uri %>
于 2013-04-15T01:15:50.100 回答
-1

您可以将字符串标记为html_safe. 我相信你需要做的就是string.html_safe

这是如果您询问当字符串中已经存在 HTML 元素时如何正确显示字符串中的 HTML 元素。

如果您想将 URL 更改为 HTML 链接,您始终可以使用辅助方法检查字符串中是否存在 http(s),并相应地添加 HTML 元素。

于 2013-04-15T00:43:28.737 回答
-3

HTML 可能更容易。在您看来:

<h2>    <!--Or whatever tag you're using-->
  Check out my video on  
  <a href="http://http://youtu.be/OkCcD6cOKgs/">YouTube</a>
</h2>
于 2013-04-15T00:46:12.570 回答