我正在使用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;
}