1) способ: Как сделать всё одним регулярным выражением, а не создавать кучу переменных? PHP: $str = 'hello [b]world[/b] test'; $bbFfom = preg_replace('#\[b\]#', '<b>', $str); $bbBefore = preg_replace('#\[/b\]#', '</b>', $bbFfom); echo $bbBefore; 2) способ: Я не знаю, как вставить нужное содержимое PHP: $str = 'hello [b]world[/b] test'; echo preg_replace('#\[b\].+\[/b\]#', '<b>world</b>', $str);
Если я тебя правильно понял PHP: $str = 'hello [b]world[/b] test'; echo preg_replace('#\[b\](.+)\[/b\]#', '<b>\1</b>', $str); Код (Text): hello <b>world</b> test
Нужно стать виртуозом по регуляркам. Хотя и этого маловато... нужно было родиться гением. PHP: <?php $str = 'hello [b]world[/b] test'; echo preg_replace('#\[b\](.+)\[/b\]#', '<b>$1</b>', $str);
в таком случае на те PHP: function BB_TEXT( $string ) { $search = [ '#\[b\](.+?|)\[/b\]#is', '#\[i\](.+?|)\[/i\]#is', '#\[u\](.+?|)\[/u\]#is', '#\[s\](.+?|)\[/s\]#is', '#\[img\](.+?|)\[/img\]#is', '#\[url=(.+?|)\](.+?|)\[/url\]#is', '#\[align=(left|center|right)\](.+?|)\[/align\]#is', '#\[color=\#(.+?)\](.+?|)\[/color\]#is', '#\[(php|js|html)\](.+?|)\[/(php|js|html)\]#is' ]; $replace = [ '<span style="font-weight: bold;">$1</span>', '<span style="font-style: italic;">$1</span>', '<span style="text-decoration: underline;">$1</span>', '<span style="text-decoration: line-through;">$1</span>', '<img src="$1">', '<a href="$1">$2</a>', '<div align="$1">$2</div>', '<span style="color: #$1;">$2</span>', '<code class="$1">$2</code>' ]; return preg_replace ( $search, $replace, $string ); } многобайты тоже важны
Я не понимаю, почему звёздочки не меняются на em? Я же сказал найти слово, если оно начинается на * и заканчивается на * PHP: echo preg_replace('#\b(?<=\*)(.+)(?=\*)\b#', '<em>$1</em>', 'This text has *two* *italic* bits'); --- Добавлено --- А вот так, почему-то выводятся только последние буквы слова, не понятно почему? PHP: echo preg_replace('#\*([a-z])+\*#', '<em>$1</em>', 'This *text* is *italic*');
Я сделал, что бы текст менялся, если есть одиночные звёздочки, в первой строчке, работает, как надо, а во второй работает неправильно, том должна быть вся строка курсивом, почему она не закурсивилась? PHP: echo preg_replace('#(?<!\*)\*([a-zA-Z\s\.]+)\*(?!\*)#i', '<em>$1</em>', '**bold text with *italic* **'); echo '<br>'; echo preg_replace('#(?<!\*)\*([a-zA-Z\s\.]+)\*(?!\*)#i', '<em>$1</em>', '*italic text **with bold** *');
не работает PHP: echo preg_replace('#\[b\](.+)\[/b\]#', '<b>$1</b>', 'hello [b]world[/b] test [b]word[/b]');
PHP: echo preg_replace('#\[b\](.+?)\[/b\]#', '<b>\1</b>', 'hello [b]world[/b] test [b]word[/b]'); Код (Text): hello <b>world</b> test <b>word</b> Почитай про жадность
PHP: $str='hello [b]world[/b] test'; $r = '/\[(b|i|(?:em))]([^\[]*)\[\/\1]/'; echo preg_replace($r ,'<$1>$2</$1>',$str);
Верну эту тему, а как же в форме указать кнопки ББ кодов, чтобы при клике на которую должен вставляться ББкоде.
вешаешь на кнопку событие клика с указанным идентификатором, дальше фун-нал js. А вообще не париться и скачать готовое, но и готовое иногда "я ебал в рот, лучше свое сделаю без кучи дерьма"
мне нужен минимал функционал) например: жирный, наклонный, code, pre, заглавный, ну типа для начала хватит), я просто не хочу писать в ручную когда текст в БД добавляю: <b>Я база</b> и так далее. Т.е. событие у кнопки должен быть id свой ?
да. Слушать определенные кнопки. а в атрибутах кнопок указать id принадлежности ББ кода. <div id="keyb_bbcode" data-id="6">жирный</div>
Объясните при вставке в базу как должен текст вставляться с html тегами, я правильно понимаю? ибо у меня при вводе текст в базу вставляется <span>текст</span> это правильно? если да а как же тогда вывести для пользователя в нужном формате, без html свойств? функция htmlspecialchars(string) все ровно печатает html разметку. пример как пробовал я: PHP: <td><?=htmlspecialchars($post['title'], ENT_QUOTES); ?></td> выводит так: PHP: <span style="font-weight: bold;">жирный</span>
Нашел функцию еще strip_tags() вроде выводит без html тегов, по описанию в мануале советуют не пользоваться этой функцией так как она не проверяет валидность тегов, при ошибке закрывающего тега весь текст может поплыть. нашел еще такую функцию html_entity_decode() работает нормально, вот теперь думай что использовать лучше.
Всем дарова, у меня такая ерунда из-за этих стилей из bbcode: PHP: '<span style="font-weight: bold;">$1</span>', '<span style="font-style: italic;">$1</span>', '<span style="text-decoration: underline;">$1</span>', '<span style="text-decoration: line-through;">$1</span>', ломается стиль шаблона, из-за чего это происходит? И как можно поправить этот косяк? Я заметил что в один ряд нельзя больше 3-х span style="" поставить, так как стиль поломается. Я хотел бы использовать наклонный, перечеркнутый и жирный текст, но чтобы мои стили не ломались.