使用 Ruby/Rails 将链接从字符串转换为可点击的链接

Joh*_*n D 5 ruby ruby-on-rails

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

这是一个例子:

"Check out my video on you tube http://youtu.be/OkCcD6cOKgs"
Run Code Online (Sandbox Code Playgroud)

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

MUH*_*BAN 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
Run Code Online (Sandbox Code Playgroud)

这是我从Ruby 中找到的最好方法到目前为止,使纯文本链接可点击

  • 这似乎有效,但我遇到了一个错误。我有这样的文本“查看此链接上的完整列表:https://google.com/”,它给了我“查看此&lt;a href=\”link:\"&gt;链接上的完整列表:&lt;/ a&gt; &lt;a href=\"https://google.com/\"&gt;https://google.com/&lt;/a&gt;"` 其中任何结尾带有冒号的单词似乎都与正则表达式匹配。 (2认同)

Har*_*ood 5

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

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

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

  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
Run Code Online (Sandbox Code Playgroud)

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

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


The*_*ude -2

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

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

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