За последние 24 часа нас посетили 18742 программиста и 1603 робота. Сейчас ищут 874 программиста ...

bb-коды

Тема в разделе "Прочие вопросы по PHP", создана пользователем elagin91, 9 янв 2012.

  1. elagin91

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

    С нами с:
    14 ноя 2011
    Сообщения:
    40
    Симпатии:
    0
    У меня небольшая проблема.
    Я делаю bb коды и у меня не очень получается...
    Мой код:
    PHP:
    1. <?php
    2. function bb($a){
    3. global $MY, $ip;
    4. $a = str_replace("\\","\\\\",$a);
    5. $a = str_replace("\"","\\\"",$a);
    6. $a = preg_replace("#<\?if\(\\\$(.*?)\\\$\)\?>#i","\"; if(\"\$\\1\$\"){ echo \"",$a);
    7. $a = preg_replace("#<\?if\(\\\$(.*?)\\\$=(.*?)\)\?>#i","\"; if(\"\$\\1\$\"==\"\\2\"){ echo \"",$a);
    8. $a = str_replace("<?else?>","\"; }else{ echo \"",$a);
    9. $a = str_replace("<?endif?>","\"; } echo \"",$a);
    10.     array('$USER_GROUP$',   '$USER_GROUP_ID$',  '$USER_EMAIL$', '$USER_NICK$',  '$USER_PASSWORD$',  '$IP_ADDRESS$'),
    11.     array($MY[group_text],  $MY[group],         $MY[email],     $MY[nick],      $MY[pass],          $ip),
    12.     $a);
    13. $a = str_replace("\$","\\\$",$a);
    14. $a = "echo \"$a\";";
    15. if(!@eval($a)){ echo "Не закрыто одно или более условий"; }
    16. }
    17. bb('<?if($USER_GROUP_ID$)?>Условие 1<?endif?><?if($USER_GROUP_ID$="4")?>Вы админ<?endif?>');
    18. ?>
    global $MY, $ip - это глобальные переменные которые работают.

    Моя основная проблема в том что я хочу сделать что если не закрыто условие то чтобы это выводилось, но у меня почему то выводится всегда, даже если код выполнился нормально.
     
  2. elagin91

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

    С нами с:
    14 ноя 2011
    Сообщения:
    40
    Симпатии:
    0
    Вобщем что бы не грузить вас говорю короче: как проверить успешно ли выполнилась функция eval или она не выполнилась из за ошибки, if(!@eval("Код")){ echo "Ошибка"; } - не работает
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Функция eval() возвращает NULL пока не вызывается return, в случае чего возвращается значение, переданное return. Если в исполняемом коде присутствует ошибка, то eval() возвращает FALSE и продолжается нормальное выполнение последующего кода. Ошибку обработки кода парсером невозможно использовать в set_error_handler().

    http://ru.php.net/manual/ru/function.eval.php

    Можешь в конец кода, который выполняется в eval() дописывать " return(true);" и тогда сможешь проверять его выполнение простым

    if(eval($code))
     
  4. elagin91

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

    С нами с:
    14 ноя 2011
    Сообщения:
    40
    Симпатии:
    0
    Спасибо)
     
  5. elagin91

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

    С нами с:
    14 ноя 2011
    Сообщения:
    40
    Симпатии:
    0
    У меня ещё такой вопрос:
    я не очень хорошо понимаю принцип preg_replace и поэтому прошу помощи.
    Как найти в тексте <? тут цифры, +, -, *, / или = ?>
    preg_replace("#<\?(.*?)\?>#i","'.\\1.'",$text);
    ищет любой текст в <? ?> , а как только цифры - = + / и *
     
  6. elagin91

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

    С нами с:
    14 ноя 2011
    Сообщения:
    40
    Симпатии:
    0
    И ещё один вопрос: как сделать многострочную проверку preg_replace?