2014-09-27 2 views
0

Если у меня есть строка, как:Explode строка затем разобрать разделитель для переменных

$string = "the year is currently <!--CODE echo date('Y'); CODE-->, it's been a good year." 

Где в строке выше <!--CODE и CODE--> были разделители и все, что в промежутке между разделителями вырванная из контекста и из в строку. затем снова развязать его снова, но с удаленными разделителями и eval(), примененными к строке, сделанной из разделителей.

Предположительно, я должен использовать explode и implode для разделения и объединения строки, но как определить и разобрать разделитель для переменной, как я описал, я понятия не имею.

Если бы кто-нибудь мог мне помочь, я бы очень благодарен вам.

EDIT: Возможно, я должен четко прояснить одно. $ string в приведенном выше примере представляет собой запись базы данных, содержащую HTML, и этот HTML-код отправляется конечному пользователю, но прежде чем это произойдет, я хочу обработать запись базы данных для вышеупомянутых комментариев HTML и проанализировать PHP-код внутри них соответственно. Я не могу просто хранить PHP в базе данных, поскольку он либо отражен в документе, видимом всем, либо комментарии HTML встроены в документ. Я хочу проанализировать запись базы данных для комментариев HTML, содержащих PHP-код, чтобы я мог отделить строки и использовать eval() в строке, содержащей код PHP.

+0

использовать preg_split для разделения строки ?? –

+0

@AvinashBabu Как бы вы посоветовали использовать эту функцию? – TimD

ответ

1

Как что:

$string = "the year is currently <!--CODE return date('Y'); CODE-->, it's been a good year."; 

$string = preg_replace_callback('/<!--CODE(.*?)CODE-->/', 
    function($groups) { return eval($groups[1]); }, 
    $string); 

echo $string; // displays: "the year is currently 2014, it's been a good year." 

Обратите внимание, что я изменил «эхо» для «возвращения» во встроенном коде. Если вам действительно нужно использовать эхо, вам нужно будет использовать буферизацию вывода, чтобы записать его вывод в строку.

+0

Отлично, спасибо за это. Только один вопрос, мне нужно сохранить функцию inline? – TimD

+0

@TimDoyle Вам не нужно держать его в строгом; вы можете использовать любой тип ссылки [вызываемый] (http://www.php.net/manual/en/language.types.callable.php), хотя встроенный синтаксис является самым аккуратным. – Boann

Смежные вопросы