сохраняю в бд php-код, предварительно фильтрую. Код (PHP): $descr= filter_var($_POST['text'], FILTER_SANITIZE_SPECIAL_CHARS); содержимое в базе данных Код (PHP): function tpl_forma($title, $text){ $content = ""; return $content; } при выводе в браузер преобразуем и подсвечиваем Код (PHP): echo highlight_string(html_entity_decode($descr, ENT_QUOTES), true); все вроде прекрасно работает, но есть одно но! переменная $title в самом движке используется для вывода заголовка страницы. например, если $title = "тест тест тест"; то выведется Код (PHP): function tpl_forma(тест тест тест, $text){ $content = ""; return $content; } что может быть причиной такого поведения?
в пхп символом $ идет указание на переменную, соответственно, при выводе при совпадении в нее подставляется значение. Теперь она выглядит так - $title, а на странице отображается именно $title, что и нужно было. Насчет других пока проблем нет.
$title используется и в ней лежит заголовок страницы, $text не используется, поэтому-то и не заменился. Код (PHP): $title = "заголовок"; //переменная используемая движком $code = "$title"; // это код который надо подсветить, случайным образом совпадает с переменной движка echo $code; вопрос на засыпку, что выведет?
где выведет? по эхо будет заголовок. а по хайлайту все останется как есть. ну то есть должно остаться. я вот никак не могу заставить хайлайтер подменять переменные на их значения. поэтому и присоединился к вопросу. напишите короткий код который отображает данное нестандартное поведение. может это косяк анатомии движка?
может быть. я уже подключил класс GeSHi. попробовал так Код (PHP): $title = "заголовок"; //переменная используемая движком $str = "<"."? function tpl_forma($title, $text){ $content = \"\"; return $content; }?>"; $code = highlight_string($str); return $code; результат Код (Text): function tpl_forma(заголовок, ){ = ""; return ; } Добавлено спустя 1 минуту 20 секунд: эта запись тестировалась не на движке, просто в тестовом файле
В данном случае строка сразу будет равна Код (Text): function tpl_forma(заголовок, ){ = ""; return ; } Хайлайтер тут не при делах. Попробуйте записать всё то же самое в одинарных кавычках, а не двойных.
результат Код (Text): function tpl_forma($title, $text){ $content = ""; return $content; } Добавлено спустя 1 минуту 52 секунды: я строку из базы беру, мне ее надо значит в одинарные засунуть?
По идее, если берете из базы, то там вообще кавычек быть не должно, "переменная равна переменной". У Вас есть? Можете показать место где присваиваете значение?
все правильно, перед тем как базу положить фильтруем Код (PHP): $text = filter_var($_POST['text'], FILTER_SANITIZE_SPECIAL_CHARS); а потом уже кладем в базу З.Ы. можно не париться, я сделал, как писал выше. может не очень кашерно, но работает =)