Проблема str_replace и eval.

Статус
В этой теме нельзя размещать новые ответы.

Maza

Постоялец
Регистрация
2 Июл 2007
Сообщения
255
Реакции
120
Не могу понять, как сделать, чтоб заменяемый текст вставал именно в это место
Код:
{php}
Использую PHP4. Текст всегда вставляется в начало в не зависимости от того где стоит описатель.
Код:
{php}
Исходник:
PHP:
<?php
$page = "Это супер строка импортированная {php} имеет очень большой размер";

$includedate = 'print rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";';

$page=str_replace("{php}", eval ($includedate), $page);
echo $page;
?>
 
Не могу понять, как сделать, чтоб заменяемый текст вставал именно в это место
Код:
{php}
Использую PHP4. Текст всегда вставляется в начало в не зависимости от того где стоит описатель.
Код:
{php}

Конечно будет вначале, т.к. в данном случае eval выполняет код, который осуществляет вывод текстовой информации.
Если вы идете данным путем, то у вас два варианта:
1. сделать так
PHP:
$includedate = print rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";
2. если необходима постоянная генерация чисел, сделать так
PHP:
function includedate { return rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";}
$page=str_replace("{php}", includedate, $page);
 
  • Нравится
Реакции: Maza
А, можно ли сделать так чтоб именно в этом месте
Код:
{php}
исполнялся и выводился php код?
 
А, можно ли сделать так чтоб именно в этом месте
Код:
{php}
исполнялся и выводился php код?
Вообще eval это вред.
Что значит исполнялся и выводился? Он должен исполняться в одном месте, а выводиться в другом!!!
 
А, можно ли сделать так чтоб именно в этом месте
Код:
{php}
исполнялся и выводился php код?
Можно
PHP:
$page = "Это супер строка импортированная {php} имеет очень большой размер"; 
echo preg_replace("#{php}#e","rand(2009,2011).' год, '.rand(1,12).' месяц, '.rand(1,30).' число'",$page);
 
  • Нравится
Реакции: Maza
Вообще eval это вред.
Что значит исполнялся и выводился? Он должен исполняться в одном месте, а выводиться в другом!!!
Я имел в виду, чтоб можно было вставить php код в котором есть
Код:
print echo
и вывод происходил именно на место шаблона?
P.s думаю видимо нельзя ...
 
Можно конечно, но это не правильно.
PHP:
ob_start();
echo "Hello ";
$out = ob_get_contents();
В переменной $out и будет Hello. Но смысла в такой конструкции я не вижу.
 
Я имел в виду, чтоб можно было вставить php код в котором есть
Код:
print echo
и вывод происходил именно на место шаблона?
P.s думаю видимо нельзя ...
Самый простой способ
PHP:
<?php
function content ($path)
{
global $title,$news,$menu;
$temp = str_replace ("{title}", $title, $temp );
$temp = str_replace ("{menu}", $menu, $temp);
$temp = str_replace ("{news}",  $news, $temp);
echo ("$temp");
  }
content("pages.php");  //файл шаблона
exit;
?>
это пихаем в шаблон {news} {title}
еще проще
так
PHP:
$TPL=file_get_contents("template.html");// шаблон 
 $TPL=str_replace("{prevs}","$prevs",$TPL);
 $TPL=str_replace("{title}","$title",$TPL);
$TPL=str_replace("{key}","$title",$TPL);
 $TPL=str_replace("{desc}","$title",$TPL);
с этой $TPL переменной делаем что желаем
хоть вывод в буфер echo $TPL;
хоть запись в кеш или файл.
в шаблоне template.html {desc} {key} {title} и так далее.
 
Я имел в виду, чтоб можно было вставить php код в котором есть
Код:
print echo
и вывод происходил именно на место шаблона?
P.s думаю видимо нельзя ...
Вот, такие костыли пришли мне в голову. :crazy:
PHP:
$page = "Это супер строка импортированная {php} имеет очень большой размер";
function includedate($matches) 
  {
  echo $matches[1]; 
  include 'includedate.php'; // В includedate.php любой код.
  }
echo preg_replace_callback ("#([\W\w\S\s]*?){php}#", "includedate", $page);
includedate.php
PHP:
<?php
print rand(2009,2011)." год, ".rand(1,12)." месяц, ".rand(1,30)." число";
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху