RubyでURLを抽出してリンクする

Rubyでユーザーから投稿された内容にURLが含まれている場合に、アンカータグでリンクする。
よくみかけるソースだと
require 'uri'
def string_to_link(html_string)
  URI.extract(html_string).uniq.each{|url|
    html_string.gsub!(url,"#{url}")
  }
  html_string
end
これだとhttp://yoursiteurl.jp/bbs/http://yoursiteurl/sitemapもすべて
http://yoursiteurl.jp/がマッチするために、全てがhttp://yoursiteurl.jp/のリンクになってしまう。

なので、それらを区別するためにURLと思われる文字列の直後が半角英字、半角数字、アンダーバー、スラッシュ以外の場合、つまり全角文字、改行、スペースなどがある場合と、行末の場合はサブディレクトリとみなし、マッチさせないようにする。
また、一気にgsubで置き換えるのではなく、マッチ部分にアンカータグを破壊的に挿入するように変更する。
require 'uri'
def string_to_link(html_string)
  URI.extract(html_string).uniq.each{|url|
    html_string.gsub!(/(#{url}$|#{url}[^a-zA-z0-9_\/])/){|s| "#{url}"}
  }
 html_string
end
これでおそらく大丈夫だと思うが、細かくは未検証。


posted by digital-squad at 2010年07月10日 17時13分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。