簡易的なチャットシステムをPHPとajaxで作成する機会があって、チャットメッセージにURLが含まれていたら、その部分だけリンクに自動で変換するのに詰まったからメモ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function genlink($text) { $pattern = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+' . '|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?P<path>\/[\+~%\/.\w-_]*)?' . '\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/'; return preg_replace_callback( $pattern, function ($matches) { return sprintf( '<a href="%1$s" target="_blank">' . (!preg_match('/\.(jpg|gif|png)$/i', $matches['path']) ? '%1$s' : '<img src="%1$s" alt="" />') . '</a>', $matches[0] ); }, $text ); } |
関数に引数を渡す。
1 2 |
$text = '「http://www.google.co.jp」はGoogleのURL。'; echo $text; |