Php,smarty自动链接修改器,防止将带有点的文本修改为链接
我在我的网站上使用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+)#
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;
}
也许你需要一个带有域结尾的列表,你想替换一个,然后构建一个不同的正则表达式……是的,这就是我实际上决定要做的