2012年10月11日木曜日

FuelPHPのViewで、自動リンク

FuelPHP(1.3)のViewで、自動リンクです。文章中にURLやメールアドレスを見つけた場合、自動的にリンクするという機能です。FuelPHP限定というよりは、広く、PHP利用環境下で使えると思います。ネタ元は、こちらCodeIgniterのコード流用とあります。CodeIgniterは全く経験がありませんが、こういうコードを見てしまうと、もはや自己流は流行らないのかもしれません。まさに、フレームワークさまさまです。

function auto_link($str, $type = 'both', $popup = FALSE)
{
    if ($type != 'email')
    {
        if (preg_match_all("#(^|\s|\()((http(s?)://)|(www\.))(\w+[^\s\)\<]+)#i", $str, $matches))
        {
            $pop = ($popup == TRUE) ? " target=\"_blank\" " : "";
            for ($i = 0; $i < count($matches['0']); $i++)
            {
                $period = '';
                if (preg_match("|\.$|", $matches['6'][$i]))
                {
                    $period = '.';
                    $matches['6'][$i] = substr($matches['6'][$i], 0, -1);
                }
                $str = str_replace($matches['0'][$i],
                                    $matches['1'][$i].'http'.
                                    $matches['4'][$i].'://'.
                                    $matches['5'][$i].
                                    $matches['6'][$i].''.
                                    $period, $str);
            }
        }
    }
    if ($type != 'url')
    {
        if (preg_match_all("/([a-zA-Z0-9_\.\-\+]+)@([a-zA-Z0-9\-]+)\.([a-zA-Z0-9\-\.]*)/i", $str, $matches))
        {
            for ($i = 0; $i < count($matches['0']); $i++)
            {
                $period = '';
                if (preg_match("|\.$|", $matches['3'][$i]))
                {
                    $period = '.';
                    $matches['3'][$i] = substr($matches['3'][$i], 0, -1);
                }
                $str = str_replace($matches['0'][$i], Html::mail_to_safe($matches['1'][$i].'@'.$matches['2'][$i].'.'.$matches['3'][$i]).$period, $str);
            }
        }
    }
    return $str;
}

0 件のコメント:

コメントを投稿