|
|
|
| нужно парсить ссылки типа http://**** ,https и ftp в html код (<a href="*** )
не могу придумать регулярку. подскажите? | |
|
|
|
|
|
|
|
для: sni
(07.09.2007 в 12:07)
| | нашел на форуме:
автор: Stereo (07.07.2006 в 20:32)
Может быть криво. Если что не так - исправьте.
$text = preg_replace('/\\b((https?|ftp|file):\/\/|www\.)[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/i', '<a href="\\0">\\0</a>', $text);
подскажите что там криво и как исправить? | |
|
|
|
|
|
|
|
для: sni
(07.09.2007 в 12:07)
| | В тексте есть ссылки нормальные? Или только текст, в котором могут быть урлы? | |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 13:17)
| | Пофиг. Вот мое решение:
<?
$text = "Текст <a href='http://mail.ru'>мыло</a> еще ссылка http://softtime.ru ftp://mail.ru https://gmail.com и еще текст";
$reg = "/\s+((ftp|https?):\/\/)(www\.)?([a-z0-9:\/?&=%#_.-]+)\s+/i";
$replace = "<a href='\$1\$3\$4'>\$1\$3\$4</a>";
$text = preg_replace("$reg", "$replace", $text);
print $text;
?>
|
| |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 13:37)
| | Поправлю маленько ваше решение :)
<?
$text = "Текст <a href='http://mail.ru'>мыло</a> еще ссылка http://softtime.ru ftp://mail.ru https://gmail.com и еще текст";
$reg = "/(\s?)((ftp|https?):\/\/)(www\.)?([a-z0-9:\/?&=%#_.-]+)(\s)/i";
$replace = "$1<a href='$2$4$5'>$2$4$5</a>$6";
$text = preg_replace("$reg", "$replace", $text);
print $text;
?>
|
| |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 13:37)
| | Зачем (www\.)? - он по-любому попадет и под ([a-z0-9:\/?&=%#_.-]+)
Почему ссыкли должны быть окружены пробелами? а если я хочу в кавычки их взять? ))
А если мне надо на википедию, скажем, ссылку дать http://ru.wikipedia.org/wiki/блаблабла ? | |
|
|
|
|
|
|
|
для: kasmanaft
(07.09.2007 в 14:00)
| | >Зачем (www\.)? - он по-любому попадет и под ([a-z0-9:\/?&=%#_.-]+)
Здесь согласен
>Почему ссыкли должны быть окружены пробелами? а если я хочу в кавычки их взять? ))
это дело вкуса, хотите делайте кавычки
>Почему бы вместо ([a-z0-9:\/?&=%#_.-]+) не использовать \S+ ... все равно бяку можно засунуть.
Тоже в полне согласен. | |
|
|
|
|
|
|
|
для: Faraon
(07.09.2007 в 14:05)
| | > это дело вкуса
Нуну)) Я выступаю от лица пользователя...
> Тоже в полне согласен.
Блин, успел увидеть) В таком случае нельзя будет опять-таки урлы в кавычки брать, запятую после них ставить... | |
|
|
|
|
|
|
|
для: kasmanaft
(07.09.2007 в 14:10)
| | Есть еще один момент: нужно неучитывать ссылки внутри href нормальных ссылок. Если заранее известно, что их нет, то начальный и конечный символы не важны вообще. А если есть, тут приходится крутиться.
Можно, конечно, написать заглядывание назад, на проверку (href=['"]?) но мне не захотелось :) | |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 15:21)
| | Ой, ладно "не захотелось" =]
Кстати, так (href=['"]?) нельзя) | |
|
|
|
|
|
|
|
для: kasmanaft
(07.09.2007 в 15:45)
| | Ясен пень, нельзя. Нужно как-то так, наверное:
(?<!href=['"]?) | |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 16:28)
| | Ух ты... Интересно. Спасибо:) | |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 16:30)
| | Намутил только это:
$reg = "/([^='\"])((ftp|https?):\/\/)([a-z0-9:\/?&=%#_.-]+)/i";
|
Но тогда текст взять в кавычки не получится... | |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 16:41)
| | Но можно вот так: (?<!(href=['"])|(href=)), не очень смотрицца вообще-то....
ну не суть важно... зато работает) | |
|
|
|
|
|
|
|
для: kasmanaft
(07.09.2007 в 16:44)
| | Ну да, как вариант... А без заглядываний? К тому же, урл может быть указан, скажем, для src картинки... Что теперь, и их проверять заглядываниями? | |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 16:56)
| | Да хз.. Можно и проверить, почему нет?
Можно, наверное, ограничиться =['"]? .. или даже \S["']?
Есть еще в css url(...) =]
А можно урл в конце предложения привести и точку поставить... | |
|
|
|
|
|
|
|
для: kasmanaft
(07.09.2007 в 17:18)
| | Вот чет не получается....
$reg = "/([^=]['\"]?)((?:ftp|https?):\/\/)([a-z0-9:\/?&=%#_.-]+)/i";
$replace = "$1<a href='\$2\$3'>\$2\$3</a>";
|
| |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 17:38)
| |
$reg = "/([^=].)((?:ftp|https?):\/\/)([a-z0-9:\/?&=%#_.-]+)/si";
$replace = "$1<a href='\$2\$3'>\$2\$3</a>";
$text = preg_replace("$reg", "$replace", $text);
|
| |
|
|
|
|
|
|
|
для: SHAman
(07.09.2007 в 17:42)
| | Тогда, написав урлы через пробел, заменятся не все, потому что ОНО съест два символо "не = и следующий". От линка останется ttp://...
Это, по-моему, как раз тот случай, когда нужно заглянуть назад.
Можно, конечно, придумать ченить... Но зачем..
([^='\"]['\"]?)((?:ftp|http.......... | |
|
|
|
|
|
|
|
для: kasmanaft
(07.09.2007 в 18:01)
| | угу. Ладно, оставляем вышеприведенный тобой вариант:) | |
|
|
|
|
|
|
|
|
для: Саня
(07.09.2007 в 17:40)
| | Так не интересно:) Интересно самому:) Мозгом. | |
|
|
|