Для начала давайте разберемся, в чем различие активной ссылки и неактивной. Представим, что мы размещаем простой текст, в котором есть ссылки, либо email адреса. Так как текст отображается в браузере, у нас появляется возможность оформить ссылку согласно синтаксису разметки HTML, после чего ссылка будет открывать ресурс при клике по ней. Иными словами в этом случае ссылка становится не просто строкой, а активной ссылкой, оформленной согласно синтаксису HTML. Именно это и определяет является ли ссылка активной либо нет.
На некоторых сайтах можно повстречать текст, в которых есть неактивные ссылки. Такие ссылки могут быть следствием отсутствия базовых навыков оформления ссылок у пользователей, которые размещают текст. Бывают и случаи когда их не оформляют специально, по ряду каких либо причин, но суть не в этом. Давайте рассмотрим пример, как можно найти все ссылки в тексте и сделать их активными. Для поиска ссылок и email адресов в тексте мы воспользуемся регулярными выражениями. Для удобства использования оформляем код в виде функции:
function parse_links($str) { $str = str_replace('www.', 'http://www.', $str); $str = preg_replace('|http://([a-zA-Z0-9-./]+)|', '<a href="http://$1">$1</a>', $str); $str = preg_replace('/(([a-z0-9+_-]+)(.[a-z0-9+_-]+)*@([a-z0-9-]+.)+[a-z]{2,6})/', '<a href="mailto:$1">$1</a>', $str); return $str; }
К функции обращаемся таким образом:
// наш исходный текст $str = 'Блог о веб-разработке https://href.kz'; // обращаемся к функции echo parse_links($str); // На выходе получаем: // Блог о веб-разработке <a href="https://href.kz">https://href.kz</a>';
Теперь о минусах данного примера. Нужно понимать, что чем больше у вас текст, тем дольше происходит его обработка, и нагрузка на процессор вашего сервера. Это означает, что ссылки следует преобразовывать ещё до момента записи текста в базу, т.е. конечным посетителям сайта текст должен показываться уже с преобразованными ссылками ещё на стадии его добавления.
Отлично!
Только первой строчкой нужно добавить:
str = str_replace('http://www', 'www', $str);
Иначе к адресам http://www будет добавлять лишнее http
$str = "simple test ";
echo parse_links($str);
И передайте привет вёрстке;
echo htmlspecialchars(parse_links($str));
и ссылки стали ещё красивее))
парсер съел
$str = simple test *здесь закрывающий див*;
а здесь вложенные тэги bold, bold italic