Php,smarty自动链接修改器,防止将带有点的文本修改为链接

Php,smarty自动链接修改器,防止将带有点的文本修改为链接,php,hyperlink,smarty,smarty3,Php,Hyperlink,Smarty,Smarty3,我在我的网站上使用smarty和特殊的链接修改器,它可以从用户的评论中变成可点击的链接文本。它工作得很完美,除了它能把像p.s.someword.asag这样的文本片段转换过来,等等?有没有办法改进它,防止这种事情发生,让它只在真正的网络链接上工作 function smarty_modifier_autolink($string) { $string = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#

我在我的网站上使用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;
}
函数智能修改器自动链接($string)
{
$string=preg#u replace#回调('#(?:https?:/\S+)|(?:www.\S+)|(?:\S+\.\S+)|',函数($arr)
{
$email=filter\u var($arr[0],filter\u VALIDATE\u email)===$arr[0]?真:假;
$origArr0=$arr[0];
if(strpos($arr[0],'http://')!==0和&strpos($arr[0],'https://'))!==0)
{
$arr[0]=“http://”。$arr[0];
}
$url=parse_url($arr[0]);
//图像
if(isset($url['path'])){
if(preg#u match(“#\”(png | jpg | gif)$#“,$url['path']))
{
返回“”;
}
}
//youtube
if(在数组中($url['host'],数组('www.youtube.com','youtube.com'))
&&$url['path']='/watch'
&&isset($url['query']))
{
parse_str($url['query',$query);
返回sprintf(“”,$query['v']);
}
//链接
如果($电子邮件){
返回sprintf(“”,$0);
}否则{
返回sprintf(“”,$arr[0],str_replace($url['scheme'].:/”,“”,$arr[0]);
}
},$string);
返回$string;
}

也许你需要一个带有域结尾的列表,你想替换一个,然后构建一个不同的正则表达式……是的,这就是我实际上决定要做的