Forum Webscript.Ru
Программирование => PHP => Тема начата: tarya от 10 Сентября 2003, 19:30:43
-
Задумался на тем чтоб сделать выделение адреса автоматически как тут на форуме:
Почитал по выражениям немного написал:
$body = ereg_replace ("http://(([A-Za-z0-9./?\\-])*)", "\\\\0", $body);
все работает, но потом оказалось что когда приходится обработать более длинную стоку типа http://www.yandex.ru/yandsearch?rpt=rad&text=php то получается совсем плохо, не может.
Подскажите регулярное выражение для полного соответствия чтоб любую стоку адреса обработало.
Спасибо большое
-
идеального паттерна не может быть по определению.
допустим, запятая может быть как просто запятой, так и частью адреса.
и так со многим символами.
так что, пиши просто http://(\\S*)" - все от хттп до пробела - и будет тебе щастье.
-
хмм... вообще-то URL-ы каким-то RFC описываются и набор символов ограничен и запятая не может быть частью адреса (echo urlencode(",");) Это современные броузеры начали "умничать" и "правильно" обрабатывать http://a.ru?a=русский,текст
На php.spb.ru был регексп подсветки адресов или из какого-то бесплатного форума вытяни (типа phpBB)
-
http://a.ru?a=русский,текст
[off]мда, VBulletin даже неправильные ссылки "правильно" отрабатывает ;) [/off]
-
дело не в русском тексте, а в очень распространенных ссылках на флеш ролики, уж не знаю, что там на сервере стоит.
вила ?0,0,32456,0
и дело не в том, что современные браузеры такие умные, а в объективной реальности
-
Нашел интересный код. Попробуй:
$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
"\\\\0", $text);
Обязательно напиши, что получилось.
-
mikelsv:
Нашел интересный код. Попробуй:[/quote
да мне бы по ссылке адресов, но я кажется разобрался в чем беда была :)
-
Вообще вроде всего 3 варианта где может быть использована ссылка:
src=
href=
background=
поэтому лучше всего искать от начала, потом смотреть следующий символ после равно, и на такой символ должна заканчиваться ссылка, если не стоит символ отмены, тогда продолжать поиск. Еще худший вариант, если после = стоит не ковычка (однерная, двойная), а символ, значит заканчивается ссылка или на пробел или на символ завершающего тэга, а еще может стоять пробел внутри кавычек допустим как параметр для какой-то функции.
Вобщем нормальный сценарий для 100% выделения ссылок можно написать, но он будет медленно работать, чем-то всегда приходится жертвовать... :(