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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: вырезать ссылки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: требуется вырезать ссылку, показать её если она есть в посте
broshurkaplus
Отправлено: 11 Сентября, 2011 - 18:35:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




здраствуйте
запутался в регулярках
требуется вырезать ссылку, показать её, если она есть в посте.
делаю типо так
в базу ставлю
CODE (htmlphp):
скопировать код в буфер обмена
  1.                     $_POST['coment']= trim($_POST['coment']) ;
  2.                     $_POST['coment']= htmlspecialchars($_POST['coment']) ;        
  3.                     $_POST['coment']=nl2br($_POST['coment']);
  4.                     $_POST['coment']= mysql_real_escape_string($_POST['coment']);


далее вставка , + хочу проверить пред этим есть ли ссылки в посте
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match('#(http://)?(www\.)?\w+\.[a-z]{2-5}#i',$_POST['coment'],$matches);
  2. $url=$matches[0];
  3. if($url){echo "выпытаетесь добавить ссылку, что в этом поле запрещено ".$url;}


не получается, поиском не помогло может кто напишет регулярку
(при выводе ссылок из бд они показываются как текст - может и не надо проверять. а надо просто их поудалять на. ,выводится текстом её же и ставим в комент для добавления
<a href="http://www.вапвап.ru/registracia/index.php">вапвапв</a> те я пишу камент и в него эту ссылку а он при просмотре выводит её же не как ссылку а как текст, ЗАПУТАЛСЯ уже...)
я в рег-х не очень
 
 Top
LIME
Отправлено: 11 Сентября, 2011 - 22:07:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




за изучение регулярок только взялся вплотную
вот наваял))
испытайте пжлст
если у когото есть поправки не стесняйтесь ))
PHP:
скопировать код в буфер обмена
  1. preg_match('#<\s*a\s+href=(.*?)>(.*?)<\s*/a\s*>#i',$_POST['coment'],$matches) ;
  2. $url=$matches[1];
  3. if ($url) echo 'Вы пытаетесь добавить ссылку, что в этом поле запрещено '.$url;

(Добавление)
или я непонял
надо отменить ссылки или адреса?
это две большие разницы
моя рег ищет ссылки
(Добавление)
broshurkaplus посмотрите в сторону http://www.php.su/functions/?preg-match-all потомучто preg_match ищет до первого совпадения а ссылок может быть несколько

(Отредактировано автором: 12 Сентября, 2011 - 08:36:57)

 
 Top
broshurkaplus
Отправлено: 12 Сентября, 2011 - 11:23:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




вобщем чото не фурычит и ещёж надо учесть домены 2го уровня

задача так
если нет, то обрабатываем и вставляем в базу
если есть хотяб одна сылка в посте, то эхо ... и сылка...
т е юзер пытается втолкнуть невидимуюсылку и (или) сылку на пробелах а оно не даёт и после пары попыток он кинет это затею

да может быть не фурычит изза того что я форму динамически подгружаю
и отправляю а если ошибка те есть сылка то вывод эхо такой

PHP:
скопировать код в буфер обмена
  1. preg_match(....) ;
  2. $url=$matches[0];
  3. if (!$url) {
  4.                     $_POST['coment']= trim($_POST['coment']) ;
  5.                     $_POST['coment']= htmlspecialchars($_POST['coment']) ;        
  6.                     $_POST['coment']=nl2br($_POST['coment']);
  7.                     $_POST['coment']= mysql_real_escape_string($_POST['coment']);
  8.  и вставл в бд}
  9. else{$resultat="<font class=text3><font color=red>Извините, но Вы пытаетесь добавить ссылку<br><font color=blue>".$url."</font>,<br> что запрещено ПРАВИЛАМИ. Пожалуйста попробуйте ещё раз.</font></font><br><br>";
  10.                            echo "<script>parent.document.getElementById('$div').innerHTML='$resultat'</script>";}


и здесь не показывает саму сылку те $url
блин дето видел это на форуме но не магу найти

(Отредактировано автором: 12 Сентября, 2011 - 11:25:11)

 
 Top
LIME
Отправлено: 12 Сентября, 2011 - 11:35:51
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




broshurkaplus перечитайте внимательнее мой пост
поясняю
http://forum.php.su/topic.php?fo...mp;v=#1315815826 это адрес
<a href='http://google.ru'>ссылка</a> это ссылка
вам видимо надо убрать адреса
вот вам сайт в нем поищите распространенные регулярки...полазайте найдете
http://gskinner[dot]com/RegExr/
(Добавление)
справа вверху выбрать коммюнити
 
 Top
broshurkaplus
Отправлено: 12 Сентября, 2011 - 13:57:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




ну во порылся и собрал-нашёл

CODE (htmlphp):
скопировать код в буфер обмена
  1. ((http:\/\/)?(www\.)?([\w\d-]*?\.)(\w{2,4})/?)i


вставляю в свой код и тестил
распознаёт все англ. имена напоминающие имя сайта

с тегом <a> и без
с http и без
с ввв и без
просто имена англ. типа ddd.dd и DdD.dDd
по моему есть недостатки типа
если домен 2го уровня то из ddd.dd.dd показывает ddd.dd хотя в принципе всё равно видит
не режет домены латиницей типа путин.рф , думаю это не сильно распостранено пока даи нормальные коменты на русском при несоблюдении орфографии будет резать

а так +обработка перед вставкой в бд и при просмотре комента он будет не как ссылка а как текст
вобщем думаю пока пойдёт

выслушаю мнения ?
 
 Top
LIME
Отправлено: 12 Сентября, 2011 - 14:10:28
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




broshurkaplus пишет:
если домен 2го уровня то из ddd.dd.dd показывает ddd.dd хотя в принципе всё равно видит
((http:\/\/)?(www\.)?([\w\d-]*?\.)*(\w{2,4})/?)i
теперь испытайте
 
 Top
broshurkaplus
Отправлено: 12 Сентября, 2011 - 15:19:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


Помог: 2 раз(а)




не не правильно работает
потестил изза*

режет и любые простые слова на английском , думаю пока оставлю предыдущий вариант
 
 Top
LIME
Отправлено: 12 Сентября, 2011 - 15:26:15
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




ошибочка
меняем * на +
((http:\/\/)?(www\.)?([\w\d-]*?\.)+(\w{2,4})/?)i
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB