Как отобразить тег PHP? - PullRequest
       14

Как отобразить тег PHP?

0 голосов
/ 08 февраля 2012

Я пытаюсь отобразить тег PHP, выполнив следующее:

echo "<?php echo \"test\"; ?>";

Результат должен быть просто "тест" без кавычек, но мой код не работает. Происходит то, что на странице ничего не отображается, но исходный код "<?php echo "teste"; ?>"

Большинство из вас захочет узнать, почему я хочу это сделать. Я пытаюсь сделать свою собственную систему шаблонов; самый простой способ - просто использовать file_get_contents и заменить то, что я хочу, на str_replace, а затем использовать echo.

Проблема в том, что в файле шаблона у меня должны быть некоторые функции PHP, которые не работают, когда я отображаю страницу, есть ли другой простой способ сделать это? Или если вы просто ответите на мой вопрос, это очень поможет!

Вот пример того, чего я пытаюсь достичь:

template.tpl:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>[__TITULO__]</title>
</head>
<body >
<p>Nome: [__NOME__] <br />
Email: <a href="mailto:[__EMAIL__]">[__EMAIL__]</a><br />

<?php
if ($cidade != "") {?>
    Cidade: [__CIDADE__]<br />
    <?php
}
?>

Telefone: ([__DDD__])&nbsp;&nbsp;[__TELEFONE__] <br />
Fax:
([__DDDFAX__])&nbsp;&nbsp;[__FAX__] <br />
Interesse: [__INTERESSE__]<br />
Mensagem: 
[__MENSAGEM__] </p>
</body>
</html>

index.php

<?php
$cidade = "Teste";
$file = file_get_contents('template.php');

$file = str_replace("[__TITULO__]","Esse Título é téste!", $file);
$file = str_replace("[__NOME__]","Cárlos", $file);
$file = str_replace("[__EMAIL__]","moura.kadu@gmail.com", $file); 

if ($cidade != "") {
    $file = str_replace("[__CIDADE__]",$cidade, $file); 
}

echo $file;

?>

Я могу решить все это, просто не показывая div, у которого нет содержимого. например, если у меня есть шаблон, и в нем у меня есть 2 деления:

<div id="content1">[__content1__]</div>
<div id="content2">[__content2__]</div>

если во время установки содержимого для замены шаблона я установил content1, а не set2, div content2 не будет отображаться ...

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Использование htmlspecialchars

Это преобразует <> в &lt; и &gt;

0 голосов
/ 02 мая 2012

Здесь вы имеете дело с двумя наборами исходного кода, которые никогда не следует путать: серверный код (PHP, который есть в тегах <?php ?>) и код клиента (или браузера), который включает все теги HTML. Код сервера выводится сам код, который отправляется в браузер. Здесь вы на самом деле успешно повторяете тег PHP, но это бессмысленно для браузера, поэтому браузер игнорирует его и ничего не показывает, если вы не посмотрите на код клиента, который был ему отправлен .

Чтобы реализовать шаблоны в этом стиле, либо они не должны иметь никакого кода PHP, либо результирующая строка (которую вы сохранили в $file) должна быть выполнена, как если бы это был PHP, а не отображать его прямо в клиент. Есть разные способы сделать это. Один из них - разобрать теги PHP в строке, отобразить все, что не входит в теги PHP, и запустить eval() для всего, что есть.

...