Php,smarty autolink修饰符,防止用点修改文本到链接

时间:2017-07-21 12:31:27

标签: php hyperlink smarty smarty3

我正在使用smarty用于我的网站和特殊的链接修改器,从用户注释转换为可点击的链接文本。除了将p.s. someword.asag之类的文字转换成其他内容之外,它还是完美无缺的吗?有没有办法改进它并阻止这种事情发生,让它只在真正的网络链接上工作?

function smarty_modifier_autolink($string)
{
    $string = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', function($arr)
    {
        $email = filter_var($arr[0], FILTER_VALIDATE_EMAIL) === $arr[0] ? true : false;
        $origArr0 = $arr[0];
        if(strpos($arr[0], 'http://') !== 0 && strpos($arr[0], 'https://') !== 0)
        {
            $arr[0] = 'http://' . $arr[0];
        }
        $url = parse_url($arr[0]);
        // images
        if(isset($url['path'])){
            if(preg_match('#\.(png|jpg|gif)$#', $url['path']))
            {
                return '<img class="img-responsive" src="'. $arr[0] . '" />';
            }
        }
        // youtube
        if(in_array($url['host'], array('www.youtube.com', 'youtube.com'))
          && $url['path'] == '/watch'
          && isset($url['query']))
        {
            parse_str($url['query'], $query);
            return sprintf('<div class="embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item" src="http://www.youtube.com/embed/%s" allowfullscreen></iframe></div>', $query['v']);
        }
        //links
        if($email){
            return sprintf('<a href="mailto:%1$s">%1$s</a>', $origArr0);
        }else{
            return sprintf('<a href="%1$s" target="_blank">%2$s</a>', $arr[0], str_replace($url['scheme'].'://', '', $arr[0]));
        }
    }, $string);
    return $string;
}

0 个答案:

没有答案