Регулярка удаления ссылок с условием

nigirma

Новичок
Есть блог. Сообщения отправляемые пользователями проверяются на наличие ссылок регуляркой, которая удаляет все ссылки (из ссылок оставляет только текст) из сообщения.

PHP:
preg_replace('|<a[^>]+>([^<]+)</a>|ism','$1', $text);
Нужно добавить в нее "условие": если встречается фраза 'http://site.ru', то не удалять эту ссылку (т.е. теги a)

Сделал кучу экспериментов... Ну никак не получается...
Не люблю я эти регулярки!

Может поможет кто?
 

Adelf

Administrator
Команда форума
Где-то на stackoverflow я увидел неплохой совет. "Не используйте регулярки для обработки HTML".
З.Ы. Если уж настаиваешь на регулярках посмотри регулярные функции с callback.
 

damner2

Новичок
nigirma
А в блог пользователи прям html могут постить?
Если нет (если при выводе делается htmlspecialchars), то зачем убирать ссылки?
Если да, то замучаешься защищаться от xss
 

nigirma

Новичок
nigirma
А в блог пользователи прям html могут постить?
Если нет (если при выводе делается htmlspecialchars), то зачем убирать ссылки?
Если да, то замучаешься защищаться от xss
Да, к сожалению, могут, но только ссылки. Оптимизатор заставил сделать возможность "сслылаться на страницы ТОЛЬКО СВОЕГО сайта и ни в коем случае на другие сайты"
 

damner2

Новичок
Ну тогда просто расценивай текст, введённый пользователями, не как html. Ищи в тексте url своего сайта (регулярку, которая будет вытаскивать все ссылки из текста написать проще) и делай их ссылками.
Посмотри как пишутся ссылки в markdown или в bb-коде.
 
Сверху