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]   

> Без описания
bt_corp
Отправлено: 20 Марта, 2011 - 13:16:39
Post Id



Гость


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


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




Нужно удалить ББ-коды в тексте, текст оставить а коды удалить! Помогите с правилом Улыбка


bb-code
PHP:
скопировать код в буфер обмена
  1.  
  2. $s = preg_replace("/\[spoiler=\s*((\s|.)+?)\s*\]((\s|.)+?)\[\/spoiler\]/i","html", $s);
  3. $s = preg_replace("#\[spoiler\](.*?)\[/spoiler\]#si","html", $s);
  4. $s = preg_replace('#\[youtube\](.*?)\[/youtube\]#si','html', $s);
  5. $s = preg_replace("#\[b\](.*?)\[/b\]#si", "<b>\\1</b>", $s);
  6. $s = preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>", $s);
  7. $s = preg_replace("#\[U\](.*?)\[/U\]#si", "<u>\\1</u>", $s);
  8. $s = preg_replace("#\[h1\](.*?)\[/h1\]#si", "html", $s);
  9. $s = preg_replace("#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie","html", $s);
  10. $s = preg_replace("/\[url=((http|ftp|https|ftps|irc):\/\/[^<>\s]+?)\]((\s|.)+?)\[\/url\]/i","html", $s);
  11. $s = preg_replace("/\[url\]((http|ftp|https|ftps|irc):\/\/[^<>\s]+?)\[\/url\]/i","html", $s);
  12.  


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2011 - 13:23:57
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




PHP:
скопировать код в буфер обмена
  1. preg_replace('/\[(\w+)(?!\w)[^\]]*\]((?:(?!\[\/\1).)*?)\[\/\1\]/i', ' \2 ', $src)
- как-то так.
В случае с вложенными тэгами можно вызвать в цикле пока происходят замены.
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Марта, 2011 - 13:24:17
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




А что именно не получается? В чем неверное поведение регулярки?
 
 Top
bt_corp
Отправлено: 20 Марта, 2011 - 13:30:29
Post Id



Гость


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


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




Champion пишет:
PHP:
скопировать код в буфер обмена
  1. preg_replace('/\[(\w+)(?!\w)[^\]]*\]((?:(?!\[\/\1).)*?)\[\/\1\]/i', ' \2 ', $src)
- как-то так.
В случае с вложенными тэгами можно вызвать в цикле пока происходят замены.


Спасибо, работает!! Ха-ха


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Марта, 2011 - 13:31:52
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Champion, чтоб не создавать темку - поделись регулярочкой проверки валидности url.
Ато туплю слегка, да и знаний немного не хватает.
Так же подскажи как можно символ "&" передать в подмаску (он не экранируется гад)...
 
 Top
Мелкий Супермодератор
Отправлено: 20 Марта, 2011 - 13:35:37
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




DeepVarvar, http://ru.php.net/manual/en/func...n.filter-var.php , флаг FILTER_VALIDATE_URL


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Марта, 2011 - 13:41:11
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Мелкий
Не, не, фильтры не нужны..
Нужна настраиваемость и "масштабирование" с возможностью отключения/добавления частей регулярки,
которая обрабатывает входную строку.
Вот:
PHP:
скопировать код в буфер обмена
  1.  
  2. if (preg_match("~^((((http|https|ftp)://){0,1})". // protocols
  3.                         "((www\.)*([a-zа-я0-9_-]{1,64})(\.[a-z]{2,6}|рф))". // domains and zones
  4.                         "|(([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3}\.([0-9]){1,3})". // only ip's
  5.                         "|((([a-zа-я0-9_-]{1,32})\.){1,12}([a-zа-я0-9_-]{1,32}))". // subdomains
  6.                         "((:(([1-9]{1})|([1-9]{1}[0-9]{0,4})))|())". // ports
  7.                         //"((/{1})|(/test)|(/\?test=stest)|())". // vars
  8.                 ")$~iu",$url)) {
  9.         return true;
  10.         }

Сейчас так... Намудрил конечно..
(Добавление)
Т.е. фишка в необходимости отключать одну или несколько частей:

1. протокол
2. домены и зоны
3. порты
4. ЧПУ
5. простые переменные
 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2011 - 13:59:14
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Про символ & я не понял, что с ним сделать надо.
А остальное как-то так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match(
  2. '/^
  3.         (?:((?#протокол)\w+):\/\/)?
  4.         ((?#домен)(?:\w+\.)+\w+)
  5.         (?:(?#порт):(\d+))?
  6.         (?#дальше либо слеш, либо ничего)(?=\/|$)\/?
  7.         ((?#путь до ресурса)[^?#]*)
  8.         ((?#гет параметры)\?(?:[^=#&]*(?:=[\w%]*)?&?)*)?
  9.         ((?#якорь)\#.*)?
  10. $/ix', $src, $m);
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Марта, 2011 - 14:06:42
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Champion, спасибо, поковыряю.
Символ & просто игнорится регуляркой - будто его (и всего что после него) нет.
(Добавление)
Champion
твоя регулярка пропустила:
http://good[dot]df[dot]hj///
http://....
http://....///?test=56/good/blabla

Це не катит, но я допилить постараюсь. если что - спрошу еще...
 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2011 - 14:28:38
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Ишь прикопался. http://good.df.hj///, кстати, вполне нормальный адрес. Поправил чуть-чуть.
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Марта, 2011 - 14:33:10
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Champion пишет:
http://good.df.hj///, кстати, вполне нормальный адрес

3 слеша в конце это нормально???
 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2011 - 14:34:16
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Ну открой http://php.su////////
 
 Top
EuGen Администратор
Отправлено: 20 Марта, 2011 - 14:36:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 20 Марта, 2011 - 14:38:19
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




конечно откроется - в контексте путей и только от корня.
А если это в ЧПУ или в гет-параметрах?
(Добавление)
EuGen, да, именно это нужно.
CODE (htmlphp):
скопировать код в буфер обмена
  1.       foo://example.com:8042/over/there?name=ferret#nose
  2.       \_/   \______________/\_________/ \_________/ \__/
  3.        |           |            |            |        |
  4.     scheme     authority       path        query   fragment
  5.        |   _____________________|__
  6.       / \ /                        \
  7.       urn:example:animal:ferret:nose
  8.  

(Добавление)
Champion
запрос: http://www[dot]google[dot]com/?t=23&g=uio
вернул: http://www[dot]google[dot]com/?t=23
Как я и говорил - не хочет хавать символ &.
Буду реплейсить на что-нибудь и тогда только проверять, затем реплейсить обратно на &.
 
 Top
Champion Супермодератор
Отправлено: 20 Марта, 2011 - 15:10:42
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




DeepVarvar пишет:
запрос: http://www.google.com/?t=23&g=uio
У меня нормально вернул)
 
 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