За последние 24 часа нас посетили 22719 программистов и 1146 роботов. Сейчас ищут 626 программистов ...

Свои BB коды

Тема в разделе "Регулярные выражения", создана пользователем Dimon2x, 26 окт 2017.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    1) способ: Как сделать всё одним регулярным выражением, а не создавать кучу переменных?

    PHP:
    1. $str = 'hello [b]world[/b] test';
    2. $bbFfom = preg_replace('#\[b\]#', '<b>', $str);
    3. $bbBefore = preg_replace('#\[/b\]#', '</b>', $bbFfom);
    4. echo $bbBefore;
    2) способ: Я не знаю, как вставить нужное содержимое

    PHP:
    1. $str = 'hello [b]world[/b] test';
    2. echo preg_replace('#\[b\].+\[/b\]#', '<b>world</b>', $str);
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Если я тебя правильно понял
    PHP:
    1. $str = 'hello [b]world[/b] test';
    2. echo preg_replace('#\[b\](.+)\[/b\]#', '<b>\1</b>', $str);
    Код (Text):
    1. hello <b>world</b> test
     
    Dimon2x нравится это.
  3. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Нужно стать виртуозом по регуляркам. Хотя и этого маловато... нужно было родиться гением.
    PHP:
    1. <?php
    2. $str = 'hello [b]world[/b] test';
    3. echo preg_replace('#\[b\](.+)\[/b\]#', '<b>$1</b>', $str);
     
    Dimon2x нравится это.
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    в таком случае на те
    PHP:
    1. function BB_TEXT( $string )
    2. {
    3.     $search = [
    4.         '#\[b\](.+?|)\[/b\]#is',
    5.         '#\[i\](.+?|)\[/i\]#is',
    6.         '#\[u\](.+?|)\[/u\]#is',
    7.         '#\[s\](.+?|)\[/s\]#is',
    8.         '#\[img\](.+?|)\[/img\]#is',
    9.         '#\[url=(.+?|)\](.+?|)\[/url\]#is',
    10.         '#\[align=(left|center|right)\](.+?|)\[/align\]#is',
    11.         '#\[color=\#(.+?)\](.+?|)\[/color\]#is',
    12.         '#\[(php|js|html)\](.+?|)\[/(php|js|html)\]#is'
    13.      
    14.     ];
    15.     $replace = [
    16.         '<span style="font-weight: bold;">$1</span>',
    17.         '<span style="font-style: italic;">$1</span>',
    18.         '<span style="text-decoration: underline;">$1</span>',
    19.         '<span style="text-decoration: line-through;">$1</span>',
    20.         '<img src="$1">',
    21.         '<a href="$1">$2</a>',
    22.         '<div align="$1">$2</div>',
    23.         '<span style="color: #$1;">$2</span>',
    24.         '<code class="$1">$2</code>'
    25.      
    26.     ];
    27.     return preg_replace ( $search, $replace, $string );
    28. }
    многобайты тоже важны
     
    M.Belikov и Dimon2x нравится это.
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    просто ещё до ссылок не дошёл
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Я не понимаю, почему звёздочки не меняются на em? Я же сказал найти слово, если оно начинается на * и заканчивается на *

    PHP:
    1. echo preg_replace('#\b(?<=\*)(.+)(?=\*)\b#', '<em>$1</em>', 'This text has *two* *italic* bits');
    --- Добавлено ---
    А вот так, почему-то выводятся только последние буквы слова, не понятно почему?

    PHP:
    1. echo preg_replace('#\*([a-z])+\*#', '<em>$1</em>', 'This *text* is *italic*');
     
  7. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. echo preg_replace('#\*([a-z]+)\*#', '<em>$1</em>', 'This *text* is *italic*');
    ;)
     
    Dimon2x нравится это.
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Я сделал, что бы текст менялся, если есть одиночные звёздочки, в первой строчке, работает, как надо, а во второй работает неправильно, том должна быть вся строка курсивом, почему она не закурсивилась?

    PHP:
    1. echo preg_replace('#(?<!\*)\*([a-zA-Z\s\.]+)\*(?!\*)#i', '<em>$1</em>', '**bold text with *italic* **');
    2.     echo '<br>';
    3.     echo preg_replace('#(?<!\*)\*([a-zA-Z\s\.]+)\*(?!\*)#i', '<em>$1</em>', '*italic text **with bold** *');
     
  9. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    не работает
    PHP:
    1. echo preg_replace('#\[b\](.+)\[/b\]#', '<b>$1</b>', 'hello [b]world[/b] test [b]word[/b]');
     
  10. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. echo preg_replace('#\[b\](.+?)\[/b\]#', '<b>\1</b>', 'hello [b]world[/b] test [b]word[/b]');
    Код (Text):
    1. hello <b>world</b> test <b>word</b>
    Почитай про жадность
     
    Dimon2x нравится это.
  11. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    PHP:
    1. $str='hello [b]world[/b] test';
    2. $r = '/\[(b|i|(?:em))]([^\[]*)\[\/\1]/';
    3. echo preg_replace($r ,'<$1>$2</$1>',$str);
     
    Dimon2x нравится это.
  12. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Верну эту тему, а как же в форме указать кнопки ББ кодов, чтобы при клике на которую должен вставляться ББкоде.
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    вешаешь на кнопку событие клика с указанным идентификатором, дальше фун-нал js. А вообще не париться и скачать готовое, но и готовое иногда "я ебал в рот, лучше свое сделаю без кучи дерьма"
     
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    мне нужен минимал функционал) например: жирный, наклонный, code, pre, заглавный, ну типа для начала хватит), я просто не хочу писать в ручную когда текст в БД добавляю: <b>Я база</b> и так далее.
    Т.е. событие у кнопки должен быть id свой ?
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    да. Слушать определенные кнопки.
    а в атрибутах кнопок указать id принадлежности ББ кода. <div id="keyb_bbcode" data-id="6">жирный</div>
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    хорошо попытаюсь сделать, спасибо.
     
  17. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Объясните при вставке в базу как должен текст вставляться с html тегами, я правильно понимаю?
    ибо у меня при вводе текст в базу вставляется <span>текст</span> это правильно?
    если да а как же тогда вывести для пользователя в нужном формате, без html свойств?
    функция htmlspecialchars(string) все ровно печатает html разметку.
    пример как пробовал я:
    PHP:
    1. <td><?=htmlspecialchars($post['title'], ENT_QUOTES); ?></td>
    выводит так:
    PHP:
    1. <span style="font-weight: bold;">жирный</span>
     
    #17 _ne_scaju_, 31 янв 2021
    Последнее редактирование: 31 янв 2021
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Нашел функцию еще strip_tags() вроде выводит без html тегов, по описанию в мануале советуют не пользоваться этой функцией так как она не проверяет валидность тегов, при ошибке закрывающего тега весь текст может поплыть.
    нашел еще такую функцию html_entity_decode() работает нормально, вот теперь думай что использовать лучше.
     
    #18 _ne_scaju_, 31 янв 2021
    Последнее редактирование: 31 янв 2021
  19. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Всем дарова, у меня такая ерунда из-за этих стилей из bbcode:
    PHP:
    1.  '<span style="font-weight: bold;">$1</span>',
    2. '<span style="font-style: italic;">$1</span>',
    3. '<span style="text-decoration: underline;">$1</span>',
    4. '<span style="text-decoration: line-through;">$1</span>',
    ломается стиль шаблона, из-за чего это происходит? И как можно поправить этот косяк? Я заметил что в один ряд нельзя больше 3-х span style="" поставить, так как стиль поломается.
    Я хотел бы использовать наклонный, перечеркнутый и жирный текст, но чтобы мои стили не ломались.
     
    #19 _ne_scaju_, 2 фев 2021
    Последнее редактирование: 2 фев 2021