【发布时间】:2012-02-01 19:32:36
【问题描述】:
我找到了一种自动检测链接并将它们放在<a> 标记中的解决方案:Regex PHP - Auto-detect YouTube, image and "regular" links
相关部分(出于兼容性原因,我不得不将函数移到 preg_replace_callback 调用之外):
function put_url_in_a($arr)
{
if(strpos($arr[0], 'http://') !== 0)
{
$arr[0] = 'http://' . $arr[0];
}
$url = parse_url($arr[0]);
//links
return sprintf('<a href="%1$s">%1$s</a>', $arr[0]);
}
$s = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', 'put_url_in_a', $s);
这很好用,除非它偶然发现标签中的 url,然后它会破坏(通过将另一个标签放入其中)。它还破坏了嵌入式媒体。
问题:我怎样才能排除 HTML 标签被这个函数处理,希望只使用正则表达式?
【问题讨论】: