Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Работа с ссылками!
Форумы портала PHP.SU » PHP » Регулярные выражения » Работа с ссылками!

Страниц (1): [1]
 

1. Craken - 11 Июня, 2010 - 12:47:54 - перейти к сообщению
Приветствую Вас!
Я видел уже подобные темы, но все же немножко не то!
Нужна помощь в замене ссылок при выводе текста....
Пример:
Текст:
CODE (htmlphp):
скопировать код в буфер обмена
  1. My site [url=http://site.com]here[/url], bla-bla-bla!


Кстати.. ссылки могут быть и без использования тэгов [url]
А вот как должен выглядеть текст после замены:
CODE (htmlphp):
скопировать код в буфер обмена
  1. My site [url=http://mysite.ru/link.php?=site.com]here[/url], bla-bla-bla!


Ну и желательно чтобы кроме самой ссылки нечего в тексте больше не менялось Улыбка
Все Огромное Спасибо!
2. Joo - 11 Июня, 2010 - 13:44:05 - перейти к сообщению
Вот так например:
PHP:
скопировать код в буфер обмена
  1. $result = preg_replace('/\b(https?:\/\/[-A-Z0-9.]+(?:\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?:\?[A-Z0-9+&@#\/%=~_|!:,.;]*)?)\b/im', 'http://mysite.ru/link.php?=$1', $content);
3. JustUserR - 11 Июня, 2010 - 16:22:30 - перейти к сообщению
Joo пишет:
Вот так например:
С точки зрения регулярного выражения это скорее всего работает верно - но значение обратной ссылки лучше пропустить через функцию urlencode чтобы она не содержала лишних символов которые не предусматриваются в web-пути
4. Joo - 11 Июня, 2010 - 17:40:22 - перейти к сообщению
JustUserR пишет:
значение обратной ссылки лучше пропустить через функцию urlencode чтобы она не содержала лишних символов которые не предусматриваются в web-пути


Да, я согласен. Тогда возможно использовать preg_replace_callback вместо preg_replace
5. JustUserR - 13 Июня, 2010 - 13:36:58 - перейти к сообщению
Joo пишет:
Да, я согласен. Тогда возможно использовать preg_replace_callback вместо preg_replace
Да вполне согласен Хотя в некоторых случаях лучше использовать обычную замену без встроенной callback-функции - и ее вызов только для отдельных фрагментов строки типа f('$1') и конкатенации с соответствующей строкой замены - такой способ хорош в том случае если функция f сложная и ее выполнение требует достаточного времени - и не имеет смысл запускать ее для каждой из обратных ссылок
6. Ch_chov - 13 Июня, 2010 - 13:51:46 - перейти к сообщению
Цитата:
ыражения это скорее всего работает верно - но значение обратной ссылки лучше пропустить через функцию urlencode чтобы она не содержала лишних символов которые не предусматриваются в web-путиНужна помощь в замене ссылок при выводе текста

Почему нельзя взять модуль bb кода из любого форума и не посмотреть как там сделано?
7. JustUserR - 13 Июня, 2010 - 13:57:12 - перейти к сообщению
Ch_chov пишет:
Почему нельзя взять модуль bb кода из любого форума и не посмотреть как там сделано?
Сделать можно всегда многими спобосами - просто при указании реального web-пути в ссылке необходимо производить его предварительное urlecnode-кодирование - особенно это полезно делать в целях унификации кодировки если запрос идет с 3-его web-сервера который имеет иную кодировку по-умолчанию
8. Craken - 08 Сентября, 2010 - 08:06:29 - перейти к сообщению
Joo пишет:
Вот так например:
PHP:
скопировать код в буфер обмена
  1. $result = preg_replace('/\b(https?:\/\/[-A-Z0-9.]+(?:\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?:\?[A-Z0-9+&@#\/%=~_|!:,.;]*)?)\b/im', 'http://mysite.ru/link.php?=$1', $content);


Этот вариант отлично работает со ссылками!
Только одно НО! Товарищи, как возможно сделать так, чтобы оно не "трогало" картинки и ссылки на "http://mysite.ru"?
Спасибо огромное заранее!
9. JustUserR - 08 Сентября, 2010 - 09:30:19 - перейти к сообщению
Craken пишет:
Товарищи, как возможно сделать так, чтобы оно не "трогало" картинки и ссылки на "http://mysite.ru"?
Для того чтобы в приведенном регулярном выражении отключить автоматическое формирование гиперссылок для тех URL-адресов которые уже указывают на перенаправляемый домен - возможно использовать предварительный негативный просмотр вперед с фиксированным шаблоном этого домена - то есть начало регулярного выражения можно модифицировать примерно так (https?:\/\/(?!mysite\.ru)[-A-Z0-9.]+(?:
10. Craken - 10 Сентября, 2010 - 07:18:20 - перейти к сообщению
JustUserR пишет:
Craken пишет:
Товарищи, как возможно сделать так, чтобы оно не "трогало" картинки и ссылки на "http://mysite.ru"?
Для того чтобы в приведенном регулярном выражении отключить автоматическое формирование гиперссылок для тех URL-адресов которые уже указывают на перенаправляемый домен - возможно использовать предварительный негативный просмотр вперед с фиксированным шаблоном этого домена - то есть начало регулярного выражения можно модифицировать примерно так (https?:\/\/(?!mysite\.ru)[-A-Z0-9.]+(?:

Спасибо за понятный ответ!
Конечно интересно на сколько такая конструкция замедляет вывод текста!
11. JustUserR - 10 Сентября, 2010 - 14:05:52 - перейти к сообщению
Craken пишет:
Спасибо за понятный ответ!
Конечно интересно на сколько такая конструкция замедляет вывод текста!
Пожалуйста! Машина обработки регулярных выражения алгоритмически обладает средней производительностю однако в случае ее применения в PHP-интерпрерторе имеется несколько иная ситуация - в частности сложные и комплексыне регулярные будут работать бысрее чем набор одиночных шаблонов или использования строковых функций - дело в том что их разбор и выполнение происходит в компилируемом библиотечном коде - которые работает значительно быстрее чем интерпретатор пользовательсокго PHP-кода

 

Powered by ExBB FM 1.0 RC1