Что должна уметь админка? Пожалуй самое главное это редактор контента... Для написание какого либо текста на сайте, используют, в основном, обычные формы... Есть конечно так называемые визуальные редакторы, но сейчас я хочу поговорить не о них... Для админского редактора вполне сойдет такая схема: Обычная форма + 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 теги и вставляем между ними сохраненный текст... Собственно это все