Здравствуйте, форумчане. Это моя 3-яя тема на этом форуме. Подскажите, как при помощи функции preg_replace сделать подобное: Я имею текст, в нем имеется вот такая вещь: [font color=#color]Текст[/font]. Мне необходимо сделать вот так: Текст . Я мог бы сделать str_replace, но там конфликты, мне необходимо ИСКЛЮЧИТЕЛЬНО preg_replace. Я уже по всякому пробовал, все уроки пересмотрел — ничего не получается Помогите пожалуйста!
Добавлено через 3 часа 1 минуту Up Up Up
29.04.2013, 20:22
Замена строки на коды символов Дана строка: 5abc%+ Задание: Заменить строку на коды символов. Помогите пожалуйста.
Сервисные коды S5230 все коды работают сам проверял все коды работают сам проверял *#197328640# — Debug Screen Version Information RF Test Base.
Дан массив S(50).Вывести те символы (и их коды), коды которых кратны 5 и определить их количество. Дан массив S(50).Вывести те символы (и их коды), коды которых кратны 5 и определить их количество.
Даны два двоичных числа 10010000 и 00001001. Числа 16-е ASCII–коды и перевести их в 2-е коды Добрый день, помогите с задачкой: Даны два двоичных числа 10010000 и 00001001. Числа 16-е.
Поиск и замена Дана строка, в ней найти минимальный элемент и поменять местами с последним элементом Вот код.
Создаем BB коды на PHP
Для начала давай выясним что такое bb код. это нечто что позволяет превратить [url ]https://fapos.net[/url] в https://fapos.net . По сути BB коды это просто замена одного текста на другой по определенным правилам.
А теперь давай вспомним какая функция в PHP позволяет делать нам такие замены. Конечно же preg_replace(). Она работает по аналогии с str_replace, только принимает в качестве первого параметра, то есть что менять, регулярное выражение. Круто да? Вот как можно реализовать приведенный в начале пример BB кода при помощи этой функции
так же стоит обратить что слеш(/) и квадратные скобки([]) экранируются, так как это управляющие символы в регулярных выражениях и для того чтобы они в шаблоне означали сами себя их надо экранировать.
Вот и все что касается части преобразования, дальше уже на что вам хватит фантазии. Помните, что через подобные преобразования надо прогонять только ту информацию в которой они должны работать, такая инфа как заголовки обычно не проходит такие преобразования.
Безопасность следует помнить что BB коды как правило приводят к появлению уязвимостей по-этому чтобы свести риск на минимум перед преобразованиями прогоняйте весь текст через квотящие функции, они не затронут квадратные скобки, то есть BB коды, но сведут на нет попытки взлома через BB коды. А так как сами бб коды будут преобразованы в HTML после, с ними все будет хорошо и они будут коректно работать. Примером такой «квотящей» функции может стать htmlspecialchars();
Клиентская часть Клиентская часть BB кодов это та часть которую использует пользователь, чтобы их вставить. конечно ее может и не быть — пользователи могут просто писать их руками и все, но это не совсем удобно. Клиентская часть должна состоять как минимум из текстового поля куда будет вводиться информация и кнопок. Сами кнопки для работы используют JavaScript. Вот простой пример клиентской части
обратные BB-коды при эхо
Я нашел код для использования bb-кодов в своем личном сообщении в профилях, но когда я возвращаюсь к настройкам, чтобы изменить сообщение, он выводит html-теги вместо замены bb-кодов.
BB коды — это набор тегов, основанных на языке HTML и разработанных специально для использования в сообщениях форума. Они позволяют выполнять форматирование текста гораздо проще, чем в HTML, причём не нарушая целостность страницы. Возможность использования BB кодов настраивается администратором индивидуально на каждый раздел форума, поэтому, прежде чем использовать BB коды в сообщениях, вы должны убедиться, что они разрешены.
Ниже приведены примеры использования BB кодов.
PHP BB Code to HTML script error
A friend of mine is using a bb script which echos normal text out into bb code. He has gave me the script but can’t seem to understand how to get it to work.
so i input the text [b] hello [/b] in side the $text at the top and get nothing after the script i echo it out like so
But i get no print out. if i just print out the $text = $poke1[‘status’]; it will print out but only has normal text e.g [b] hello [/b]
простейший редактор bb кодов
div class =»bb_bar» > a href =»#» alt =»b» > Жирный a > a href =»#» alt =»i» > Курсив a > a href =»#» alt =»u» > Подчеркнутый a > a href =»#» alt =’a[href=»»]’ > Ссылка a > div > textarea id =»user_text» > textarea >
script > $( document ).ready( function () < $( ‘.bb_bar a’ ).click( function () < var button_ >this ).attr( «alt» ); button_ >» ); if (/\[.*\]/.test(attribs)) < attribs = attribs.replace(/.*\[(.*)\]/, ' $1' ); >else attribs = » ; var start = ‘[‘ +button_ >’]’ ; var end = ‘[/’ +button_ >’]’ ; insert(start, end); return false ; >); >); function insert(start, end) < element = document .getElementBy >’user_text’ ); if ( document .selection) < element.focus(); sel = document .selection.createRange(); sel.text = start + sel.text + end; > else if (element.selectionStart || element.selectionStart == ‘0’ ) < element.focus(); var startPos = element.selectionStart; var endPos = element.selectionEnd; element.value = element.value.substring(0, startPos) + start + element.value.substring(startPos, endPos) + end + element.value.substring(endPos, element.value.length); > else < element.value += start + end; > > script >
* This source code was highlighted with Source Code Highlighter .
Вот собственно и весь код. Работающий пример
BB-коды PHP
Здесь могла бы быть ваша реклама
Покинул форум Сообщений всего: 4574 Дата рег-ции: Июль 2006 Откуда: Israel
Секрет Теперь, когда вы уже наверняка второпях отправили свой запрос, я расскажу вам простой секрет, который сэкономит вам уйму ожиданий, даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю на сообщения на форуме, то пойму что в общем то я и не ошибаюсь. Но еще я точно замечу, что очень мало тем, в которых всего два ответа : вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо. Они что, сами читать не умеют? А уточнять приходится. И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть фиолетовый квадрат, и нужно превратить его в синий треугольник и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату но почему то кисточка не принимала цвет краски в банке, то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме: Что есть Что нужно получить Как я пытался Почему или что у меня не получилось.
На последок как оно происходит на форумах
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался! Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется. Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами! Старожил: Какое дерево? Ты вообще соображаешь, что говоришь? Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу! Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить. Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ. Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся. Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность: Новичок: Спасибо, братан! То что нужно.
Код: Выделить всё Развернуть $bbcode_hardtpl = array(
И добавить ниже:
Смотрим что бы ID bb-кода не совпадало с предыдущим или существующим — заданным в Панели. Если у вас уже есть добавленные через ПУ BB коды, нужно быдет изменить их ID в базе. Для этого заходим в phpMyAdmin открываем таблицу phpbb_bbcodes и изменяем ID всех совпавших бб кодов, так, что бы они не совпадали с добавляемыми.
Сохранить, обновить шаблоны, сбросить кеш и юзать. Стили и прочее по вкусу.
PHP BB Code to HTML script error
A friend of mine is using a bb script which echos normal text out into bb code. He has gave me the script but can’t seem to understand how to get it to work.
so i input the text [b] hello [/b] in side the $text at the top and get nothing after the script i echo it out like so
But i get no print out. if i just print out the $text = $poke1[‘status’]; it will print out but only has normal text e.g [b] hello [/b]
Php BB коды
Php начинающим
Иногда нам хочется добавить изюминку к нашим скриптам, сохранять в базе сообщения от пользователей не только в простом текстовом формате, но и давать им возможность форматировать свои сообщения как текст html. Здесь и нужны так называемые BB коды. То есть, это придуманные нами парные теги, которые при использовании нами будут преобразовываться в html теги.
BB код
Преобразование
Описание
[ b ] что-то здесь [ /b ]
что-то здесь
жирный текст
[ i ] что-то здесь [ /i ]
что-то здесь
наклонный текст
[ u ] что-то здесь [ /u ]
что-то здесь
подчеркнутый текст
[ q ] что-то здесь [ /q ]
что-то здесь
выделенная цитата
[ list ] что-то здесь [ /list ]
что-то здесь
не нумерованный список
[ listn ] что-то здесь [ /listn ]
что-то здесь
нумерованный список
(url)что-то здесь (/url)
» » >что-то здесь
Url ссылка
Ранее в разделе Php база, мы научились с Вами сохранять данные в таком формате, чтобы он не причинил вреда при выводе его из базы в html текст, теперь будем добавлять BB коды, а потом их преобразовывать в html. Пользователю, которого мы лишили html форматирования, теперь становится интереснее. Но, как обычно, в любом начинании есть проблемы. Одна из проблем в том, что пользователь может забыть закрыть тег, или, ещё хуже, какой-нибудь нехороший пользователь специально захочет Вам навредить. Так вот, как найти парные теги в сообщении полученном из формы, которое пользователь послал в Гостевую книгу или в Форум? Дело в том, что если у Вас простая Гостевая, это не требуется, но если есть BB коды, это становится актуально, ведь потом эти парные теги мы будем заменять на их html эквиваленты:
К примеру: [ b ] что-то здесь [ /b ] , посланное пользователем, преобразуется в что-то здесь, в этих BB кодах
Теперь представьте, что пользователь по ошибке или специально открыл только один тег [ b ] что-то здесь, а закрыть тег не захотел, то получится: что-то здесь, а закрыть тег не захотел, то получится
То есть, надо проверять парность тегов: — убирать в начале текста закрывающийся тег [ /b ] ; — убирать в конце текста открывающийся тег [ b ] ; — убирать пустые парные теги [ b ] [ /b ] ; — убирать повторяющиеся теги [ b ] [ b ] или [ /b ] [ /b ] ;
Создадим такую функцию и посмотрим как она работает:
# функция, которая убирает мусор в парных тегах function Teg ( $on e , $teg , $to o , $path ) < $on = preg_quote ( $on e ,»
s», $on e .»\\1″. $teg . $to o , $path ); > if ( !preg_match ( $_search , $path )) < $path = preg_replace («
«. $on .» [ / ] ?». $teg . $to .»
# строка с плохими парными тегами $string = » [ /b ] [ /b ] [ /b ] [ b ] Проб [ b ] у [ b ] [ b ] ем [ /b ] Обм [ b ] ан [ b ] уть [ b ] Програ [ /b ] [ /b ] [ /b ] мму [ b ] [ b ] [ b ] «; echo $string .»\n
# применим функцию по сбору мусора # в ней четыре аргумента: первые три показывают # какой тег проверяем, а последний где проверяем $string = Teg (» [ «,»b»,» ] «, $string ); echo $string ;
В итоге работы программы получим:
[ /b ] [ /b ] [ /b ] [ b ] Проб [ b ] у [ b ] [ b ] ем [ /b ] Обм [ b ] ан [ b ] уть [ b ] Програ [ /b ] [ /b ] [ /b ] мму [ b ] [ b ] [ b ]
[ b ] Пробуем [ /b ] Обм [ b ] ануть Програ [ /b ] мму
То есть, в базу, при таком подходе мы запишем только парные теги. Вы скажете зачем всё это надо, но одно дело когда, например не закрылся тег [ b ] , ещё пол беды (весь тест далее будет выделен жирным шрифтом), и совсем другое когда не закрылся [ q ] , который мы будем преобразовывать в начало таблицы
(представляете, что будет на странице при выводе такого не закрытого тега).
То есть, теперь подведем итог: Пользователь послал сообщение $message , которое мы будем записывать в базу, как убрать html дескрипторы из сообщения мы знаем (раздел Php база), теперь оставим парные и уберем пустые теги BB кодов:
При таком подходе, мы оставляем мало шансов злоумышленнику навредить нам, и даем дополнительные возможности добросовестному пользователю по использованию html разметки в своих сообщениях.
Страница: 1
Аноним добавлено: 02.06.2011 20:34
сообщение № 9
cncvn
ДЕМОН добавлено: 12.04.2011 13:54
сообщение № 8
полная хрень! можно сделать проще. нужно заменять bb-коды не по одному, а парами. ищем текст между парным bb-кодом и заменяем соответствующей комбинацией. а плохие bb-коды пускай так и остаются bb-кодами.
Цитата:
убирать в начале текста закрывающийся тег [ _/b ] ;
во первых: нахрена? во вторых: [ _/b ] это не тег, это bb-код, и навредить он не может.
в результате текст » [ _/b ] 1 [ _b ] 2 [ _b ] 3 [ _/b ] 4 [ _/b ] » превратиться в » [ _/b ] 1 2 [ _b ] 3 4 [ _/b ] » , т.е. нежелательные bb-коды будут частью текста (они не будут превращены в теги).
chessnokk добавлено: 18.03.2010 12:45
сообщение № 7
Warning: preg_replace () [ function.preg-replace ] : Compilation failed: nothing to repeat at offset 0 in D:\Program files\VertrigoServ\www\studline\function\teg.php on line 12
Далер добавлено: 31.07.2009 23:06
сообщение № 6
sd dsdas bb fff
если вести такую строку то будет sd dsdas bbfff
1 тег не закрыт — ошибочка
и ешё выдаёт Notice на 19 строке — Offset.
MSW Николаев добавлено: 08.06.2009 17:49
сообщение № 5
если ввести коды
[ _b ] [ _s ] [ _/s ] [ _/b ]
то на самом деле генерится такое:
Цитата:
в чём может быть проблема?! 🙁
Ответ: естественно теги, что привел не рассчитаны на все случаи жизни.
Леся добавлено: 28.04.2009 01:25
сообщение № 4
Искала подобную статью по всему инету, а нашла как всегда у вас. Спасибо! %tashus%
Ответ:
a1card Москва добавлено: 22.01.2009 16:29
сообщение № 3
Отличная статья как раз то, что было нужно, чтобы закончить делать сайт.
Ответ:
Антон Павловский Посад добавлено: 29.11.2007 10:13
сообщение № 2
# декодирование биби-кодов function bbcode( $sourse ) <