使用 Ruby/Rails 是否有人知道如何获取可能包含一些 HTML 元素的大字符串并将它们变成链接?
这是一个例子:
"Check out my video on you tube http://youtu.be/OkCcD6cOKgs"
我正在寻找可以将 HTML 转换为有效的可点击链接<a href ...
但也保留其他文本不变的东西,就像这个问题一样。
使用 Ruby/Rails 是否有人知道如何获取可能包含一些 HTML 元素的大字符串并将它们变成链接?
这是一个例子:
"Check out my video on you tube http://youtu.be/OkCcD6cOKgs"
我正在寻找可以将 HTML 转换为有效的可点击链接<a href ...
但也保留其他文本不变的东西,就像这个问题一样。
我知道为时已晚,但是如果有人仍然有这个问题,那么他可以这样做。
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 找到的最好方法:使纯文本链接到现在为止可点击。
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.regexp
或URI::DEFAULT_PARSER
,但这无法通过非常简单的测试。尝试在文本中包含一个单词,后跟一个冒号 ':' 字符。您不希望它成为链接!(我真的不知道为什么这个内置的解决方案这么差。我猜它更多的是用于验证而不是查找类似 URL 的子字符串)
所以我上面的解决方案是一个基于这个答案的正则表达式,并转换为更红宝石。但是当你开始寻找时,那里有许多不同的 URL 正则表达式。您可以玩寻找任何给定正则表达式失败的尴尬边缘情况的游戏。通常较长的正则表达式会捕获更多的边缘情况。但是将其转换为在 ruby 中工作也存在挑战。该网站提供了许多语言解决方案,包括一个(相当长的)ruby 示例:http ://urlregex.com
按最后一个分隔符拆分:如何通过拆分字符的最后一次出现将字符串拆分为两部分?
text, uri = "Check out my video on you tube http://youtu.be/OkCcD6cOKgs".split(/ (?=\S+$)/)
<%= link_to text, uri %>
您可以将字符串标记为html_safe
. 我相信你需要做的就是string.html_safe
。
这是如果您询问当字符串中已经存在 HTML 元素时如何正确显示字符串中的 HTML 元素。
如果您想将 URL 更改为 HTML 链接,您始终可以使用辅助方法检查字符串中是否存在 http(s),并相应地添加 HTML 元素。
HTML 可能更容易。在您看来:
<h2> <!--Or whatever tag you're using-->
Check out my video on
<a href="http://http://youtu.be/OkCcD6cOKgs/">YouTube</a>
</h2>