следующий код используется для поиска url из строки с php. Вот код:
$string = "Hello http://www.bytes.com world www.yahoo.com"; preg_match('/(http:\/\/[^\s]+)/', $string, $text); $hypertext = "<a href=\"". $text[0] . "\">" . $text[0] . "</a>"; $newString = preg_replace('/(http:\/\/[^\s]+)/', $hypertext, $string); echo $newString;
Ну, он показывает ссылку, но если я предоставляю несколько ссылок, это не сработает, а также, если я пишу без http: //, тогда он не будет показывать ссылку. Я хочу, чтобы всякая ссылка была предоставлена, она должна быть активной, например, stackoverflow.com.
Любая помощь пожалуйста ..
Рабочий метод для связывания с http / https / ftp / ftps / scp / scps: $newStr = preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?&_/]+!', "<a href=\"\\0\">\\0</a>",$str);
Я настоятельно рекомендую НЕ связывать, когда у него есть только точка, потому что он рассмотрит ссылки на PHP 5.2, ASP.NET и т. Д., Что вряд ли приемлемо.
Обновление: если вы хотите www. струны также, взгляните на это .
Если вы хотите обнаружить что-то вроде stackoverflow.com
, тогда вам нужно будет проверить все возможные TLD, чтобы исключить что-то вроде Web 2.0
, что довольно длинный список . Тем не менее, это также будет соответствовать чему-то как ASP.NET
и т. Д.
Регулярное выражение будет выглядеть примерно так:
$hypertext = preg_replace( '{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net)\b}mi', '<a href="http://$1$2$3">$1$2$3</a>', $text );
Это соответствует совпадениям доменов, заканчивающихся на .com, .org и .net … как указано ранее, вам нужно будет расширить этот список, чтобы соответствовать всем TLD
@axiomer ваш пример не работал, если ссылка будет в формате:
https://stackoverflow.com?val1=bla&val2blablabla%20bla%20bla.bl
правильное решение:
preg_replace('!(http|ftp|scp)(s)?:\/\/[a-zA-Z0-9.?%=&_/]+!', "<a href=\"\\0\">\\0</a>", $content);
производит:
<a href="https://stackoverflow.com?val1=bla&val2blablabla%20bla%20bla.bl">https://stackoverflow.com?val1=bla&val2blablabla%20bla%20bla.bl</a>