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. broshurkaplus - 11 Сентября, 2011 - 18:35:53 - перейти к сообщению
здраствуйте
запутался в регулярках
требуется вырезать ссылку, показать её, если она есть в посте.
делаю типо так
в базу ставлю
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> те я пишу камент и в него эту ссылку а он при просмотре выводит её же не как ссылку а как текст, ЗАПУТАЛСЯ уже...)
я в рег-х не очень
2. LIME - 11 Сентября, 2011 - 22:07:04 - перейти к сообщению
за изучение регулярок только взялся вплотную
вот наваял))
испытайте пжлст
если у когото есть поправки не стесняйтесь ))
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 ищет до первого совпадения а ссылок может быть несколько
3. broshurkaplus - 12 Сентября, 2011 - 11:23:46 - перейти к сообщению
вобщем чото не фурычит и ещёж надо учесть домены 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
блин дето видел это на форуме но не магу найти
4. LIME - 12 Сентября, 2011 - 11:35:51 - перейти к сообщению
broshurkaplus перечитайте внимательнее мой пост
поясняю
http://forum.php.su/topic.php?fo...mp;v=#1315815826 это адрес
<a href='http://google.ru'>ссылка</a> это ссылка
вам видимо надо убрать адреса
вот вам сайт в нем поищите распространенные регулярки...полазайте найдете
http://gskinner[dot]com/RegExr/
(Добавление)
справа вверху выбрать коммюнити
5. broshurkaplus - 12 Сентября, 2011 - 13:57:52 - перейти к сообщению
ну во порылся и собрал-нашёл

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


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

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

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

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

режет и любые простые слова на английском , думаю пока оставлю предыдущий вариант
8. LIME - 12 Сентября, 2011 - 15:26:15 - перейти к сообщению
ошибочка
меняем * на +
((http:\/\/)?(www\.)?([\w\d-]*?\.)+(\w{2,4})/?)i

 

Powered by ExBB FM 1.0 RC1