За последние 24 часа нас посетили 62706 программистов и 1768 роботов. Сейчас ищут 853 программиста ...

подсветка кода, вывод в браузер

Тема в разделе "Прочие вопросы по PHP", создана пользователем bkm, 13 май 2013.

  1. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    сохраняю в бд php-код, предварительно фильтрую.
    Код (PHP):
    1. $descr= filter_var($_POST['text'], FILTER_SANITIZE_SPECIAL_CHARS); 
    содержимое в базе данных
    Код (PHP):
    1. function tpl_forma($title, $text){    
    2.     $content = "";
    3.     return $content;
    4. }
    при выводе в браузер преобразуем и подсвечиваем
    Код (PHP):
    1. echo highlight_string(html_entity_decode($descr, ENT_QUOTES), true);
    все вроде прекрасно работает, но есть одно но!
    переменная $title в самом движке используется для вывода заголовка страницы.
    например, если $title = "тест тест тест"; то выведется

    Код (PHP):
    1. function tpl_forma(тест тест тест, $text){    
    2.     $content = "";
    3.     return $content;
    4. }
    что может быть причиной такого поведения?
     
  2. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    все, сделано, помогло

    Код (PHP):
    1. $descr= str_replace("$", "$", $descr); 
     
  3. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    А почему именно этот доллар воспринимался, как переменная, другие нет?
     
  4. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    в пхп символом $ идет указание на переменную, соответственно, при выводе при совпадении в нее подставляется значение. Теперь она выглядит так - $title, а на странице отображается именно $title, что и нужно было. Насчет других пока проблем нет.
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну это-то мы знаем. я присоединюсь к вопросу: почему $title подменился, а $text - нет?
     
  6. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    $title используется и в ней лежит заголовок страницы, $text не используется, поэтому-то и не заменился.

    Код (PHP):
    1. $title = "заголовок"; //переменная используемая движком
    2. $code = "$title"; // это код который надо подсветить, случайным образом совпадает с переменной движка
    3.  
    4. echo $code;
    вопрос на засыпку, что выведет?
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    где выведет? по эхо будет заголовок. а по хайлайту все останется как есть. ну то есть должно остаться. я вот никак не могу заставить хайлайтер подменять переменные на их значения. поэтому и присоединился к вопросу. напишите короткий код который отображает данное нестандартное поведение. может это косяк анатомии движка?
     
  8. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    может быть.
    я уже подключил класс GeSHi.

    попробовал так
    Код (PHP):
    1. $title = "заголовок"; //переменная используемая движком
    2.  
    3. $str = "<"."? function tpl_forma($title$text){    
    4.     $content = \"\";
    5.     return $content;
    6. }?>";
    7.  
    8. $code = highlight_string($str);
    9.  
    10. return $code; 
    результат
    Код (Text):
    1. function tpl_forma(заголовок, ){    
    2.      = "";
    3.     return ;
    4. }
    Добавлено спустя 1 минуту 20 секунд:
    эта запись тестировалась не на движке, просто в тестовом файле
     
  9. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    В данном случае строка сразу будет равна
    Код (Text):
    1. function tpl_forma(заголовок, ){    
    2.      = "";
    3.     return ;
    4. }
    Хайлайтер тут не при делах. Попробуйте записать всё то же самое в одинарных кавычках, а не двойных.
     
  10. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    результат
    Код (Text):
    1. function tpl_forma($title, $text){    
    2.     $content = "";
    3.     return $content;
    4. }
    Добавлено спустя 1 минуту 52 секунды:
    я строку из базы беру, мне ее надо значит в одинарные засунуть?
     
  11. PCSpeaker

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

    С нами с:
    26 дек 2007
    Сообщения:
    84
    Симпатии:
    0
    По идее, если берете из базы, то там вообще кавычек быть не должно, "переменная равна переменной". У Вас есть? Можете показать место где присваиваете значение?
     
  12. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    все правильно, перед тем как базу положить фильтруем
    Код (PHP):
    1. $text = filter_var($_POST['text'], FILTER_SANITIZE_SPECIAL_CHARS);
    а потом уже кладем в базу

    З.Ы. можно не париться, я сделал, как писал выше. может не очень кашерно, но работает =)