BB коды на php

 

Что должна уметь админка? Пожалуй самое главное это редактор контента... Для написание какого либо текста на сайте, используют, в основном, обычные формы... Есть конечно так называемые визуальные редакторы, но сейчас я хочу поговорить не о них... Для админского редактора вполне сойдет такая схема: Обычная форма + BB коды.. Перечитывая то что написал, понял, что начал как то из далека но ни чего... Собственно о чем я хотел поговорить? Я хотел поговорить о BB кодах... Что такое BB коды? Это те же самые теги HTML разметки... Ну скажем так их аналог... Работает это следующим образом. Мы в форме пишем следующий текст:

 

 

[b]Какой то текст[/b]

После обработки наших введенных данных мы получаем следующее:

<span style="font-weight:bold;">Какой то текст</span>

Впринципе с помощью str_replace(); можно запросто заменит [b] на <span style="font-weight:bold;"> а [/b] на </span> Выглядеть это будет вот так:

$txt = "[b]Жирный текст[/b]";
$txt = str_replace("[b]","<span style=\"font-weight:bold;\">",$txt);
$txt = str_replace("[/b]","</span>",$txt);

Собственно этим способом я и пользовался, пока не допустил одну маленькую ошибку.. Предположим я забыл закрыть тег b. Вот пример:

Собственно можно [b]и потерпеть[/b], так сказать [b]подождать[/b] 
когда [b]загрузится изображение

Не закрытый тег это однозначно плохо, не так ли? Как же запретить скрипту менять последний [b] на <span style="font-weight:bold;">? Пожалуй единственный выход это проверять парный ли тег, то есть обязательное условие перед заменой bb кода на HTML тег это наличие [b] и [/b]. Для этой проверки я предлагаю использовать preg_match_all() для поисков тегов и preg_replace() для подмены кода на HTML теги. Мой способ однозначно не самый лучший, и скорее всего существует более лучший, но все же я выложу свой способ

<?
$txt = "Собственно можно [b]и потерпеть[/b], так сказать [b]подождать[/b]
когда [b]загрузится изображение";

preg_match_all("/\[b\](.*?)\[\/b\]/",$txt,$t);

for($i=0;isset($t[1][$i]);$i++)
$txt = preg_replace("/\[b\].*?\[\/b\]/",
"<span style=\"font-weight:bold;\">".$t[1][$i]."</span>",$txt,1);
echo $txt;
?>

preg_match_all() находит и сохраняет текст между парными bb тегами, после функцией preg_replace() мы находим парные теги, меняем их на HTML теги и вставляем между ними сохраненный текст... Собственно это все

 

Возможно Вам будут интересны следующие заметки

Комментарии (1)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Lector, 06 Сентября 2012 г. 17:50 пишет:
Гость
А я поставил себе NicEdit , очень хороший редактор, есть возможность загружать фотки на сервер разработчика, так и на собственный хостинг. Попробуйте, очень рекомендую!