【PHP】テキストにURLが含まれていたらリンクに自動変換させる
簡易的なチャットシステムをPHPとajaxで作成する機会があって、チャットメッセージにURLが含まれていたら、その部分だけリンクに自動で変換するのに詰まったからメモ。
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 ); }
関数に引数を渡す。
$text = '「http://www.google.co.jp」はGoogleのURL。'; echo $text;