我已将此链接转换为将网址放入<a></a>
标记的
function convert_links($text) {
$text = explode(' ',$text);
for($i=0;$i<count($text);$i++) {
if(filter_var($text[$i], FILTER_VALIDATE_URL))
$text[$i] = "<a href='".$text[$i]."' target='_blank'>".$text[$i]."</a>";
else
$text[$i] = $text[$i];
}
return implode(' ',$text);
}
我是优化的新手,所以我想问:我可以让这个功能更好/更快吗?我听说array_filter在这种情况下是更好的选择,但我不能让它工作。谢谢你的帮助!
现在我已经使用array_map创建了另一个函数。那么哪一个更好用?
function convert_links($text) {
$text = explode(' ', $text);
function convert_link($val) {
if(filter_var($val,FILTER_VALIDATE_URL))
return "<a href='".$val."' target='_blank'>".$val."</a>";
else
return $val;
}
$text = array_map('convert_link',$text);
return implode(' ',$text);
}
Danielius
答案 0 :(得分:1)
作为替代方案,您可以使用preg_replace_callback
:
function convert_links($text) {
return preg_replace_callback("/\S+:\S+/", function ($match) {
return filter_var($val = $match[0], FILTER_VALIDATE_URL)
? "<a href='$val' target='_blank'>$val</a>"
: $val;
}, $text);
}
请注意:
if
和三元运算符return
,而不是return
包含两个? ... :
语句。.
连接。:
,而不是单词的开头或结尾。这样可以避免对“正常”字词进行更加昂贵的filter_var
调用。