Я нашел решение для автоматического определения ссылок и помещения их в тег <a>
здесь: Regex PHP - Автоматическое определение YouTube, изображений и «обычных» ссылок
Соответствующая часть (мне пришлось переместить функцию за пределы вызова 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 из обработки этой функцией, используя, надеюсь, только регулярные выражения?