在保留URL的同时在Rails中包裹一个长字符串?

时间:2009-05-20 22:31:16

标签: html ruby-on-rails

在我的Rails项目中,我有以下代码:

auto_link( h( wrap_long_string(post.text,50)  )).gsub(/\n/,"<br />")

wrap_long_string定义为:

  def wrap_long_string(txt,col = 20)
    txt.gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/,
      "\\1\\3\n")
  end

此代码用于显示用户输入的文本,同时通过输入非常长的非破坏字符串来防止用户弄乱页面布局。

然而,分解长不间断字符串的行为也会阻止auto_link助手工作。

我想做的是拥有以下文字:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=ZGF&q=example&btnG=Search

变成了类似的东西:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br/>aaaaaaaaaa <a href='http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=ZGF&q=example&btnG=Search'>http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=ZGF&q=example&btnG=Search</a>

2 个答案:

答案 0 :(得分:1)

如果您可以控制这些应用的顺序,我建议通过自动链接助手然后通过长文本断开器运行文本(并使'智能'足以不计算html标签中的文本作为文本:))。这应该创建链接,我相信你可以在标签之间没有任何不良后果:)

答案 1 :(得分:1)

或者,你可以定义你自己的auto_link(使用text_helper.rb中的现有代码作为模型)来首先扫描网址(和电子邮件),进行替换,找到你做出替换的指数,然后在不属于这些指数的地方打破这一行。

这应该只需要现有的自动链接代码以及对index()和length()的调用。