PHP 正在用 HTML 注释替换 php 语句中的 < & >
PHP is replcing The < & > in a php statement with HTML comments
我目前正在尝试为我正在从事的项目创建一个小型模板引擎,并且我正在使用一个系统,我将 {$tag}
替换为预设标签。所以说我把 {username}
放在我的模板文件中,它会 return 一个字符串,它是用户名。现在我想超越简单的字符串替换字符串。所以使用我输入的相同代码
$tpl->replace('getID', '<?php echo "test"; ?>);
它没有用,所以当我去检查元素时,我看到它 returned <!--? echo "test"; ?-->
...
所以现在我只是想弄清楚为什么 return 编辑了注释代码。
这是我的 class 文件:
class template {
private $tags = [];
private $template;
public function getFile($file) {
if (file_exists($file)) {
$file = file_get_contents($file);
return $file;
} else {
return false;
}
}
public function __construct($templateFile) {
$this->template = $this->getFile($templateFile);
if (!$this->template) {
return "Error! Can't load the template file $templateFile";
}
}
public function set($tag, $value) {
$this->tags[$tag] = $value;
}
private function replaceTags() {
foreach ($this->tags as $tag => $value) {
$this->template = str_replace('{'.$tag.'}', $value, $this->template);
}
return true;
}
public function render() {
$this->replaceTags();
print($this->template);
}
}
我的索引文件是:
require_once 'system/class.template.php';
$tpl = new template('templates/default/main.php');
$tpl->set('username', 'Alexander');
$tpl->set('location', 'Toronto');
$tpl->set('day', 'Today');
$tpl->set('getID', '<?php echo "test"; ?>');
$tpl->render();
我的模板文件是:
<!DOCTYPE html>
<html>
<head></head>
<body>
{getID}
<div>
<span>User Name: {username}</span>
<span>Location: {location}</span>
<span>Day: {day}</span>
</div>
</body>
</html>
您在 php 文件中重新声明 PHP,但没有必要。即你正在尝试打印 <?php
这就是它搞砸的原因。
因此,您可以替换为:
$tpl->set('getID', '<?php echo "test"; ?>');
有了这个
$tpl->set('getID', 'test');
但是,您显然已经知道,您只是想更进一步,方法是在集合中使用 php。所以,作为一个想法,你可以试试这个:
$tpl->set('getID', testfunction());
(你在这里调用 testfunction
顺便定义 'getID'
)
所以,现在你想写一个小函数来做一些花哨的事情,为了这个例子:
function testfunction(){
$a = 'hello';
$b = 'world';
$c = $a . ' ' . $b;
return $c;
}
上面应该 return hello world 代替 {getID}
参考您的评论 - 如果您想更进一步并开始使用 return 结果更高级,您可以执行以下操作:
function testfunction(){
$content = "";
foreach ($a as $b){
ob_start();
?>
<span><?php echo $b->something; ?></span>
<a href="#">Some link</a>
<div>Some other html</div>
<?php
$content += ob_get_clean();
}
return $content
}
我目前正在尝试为我正在从事的项目创建一个小型模板引擎,并且我正在使用一个系统,我将 {$tag}
替换为预设标签。所以说我把 {username}
放在我的模板文件中,它会 return 一个字符串,它是用户名。现在我想超越简单的字符串替换字符串。所以使用我输入的相同代码
$tpl->replace('getID', '<?php echo "test"; ?>);
它没有用,所以当我去检查元素时,我看到它 returned <!--? echo "test"; ?-->
...
所以现在我只是想弄清楚为什么 return 编辑了注释代码。
这是我的 class 文件:
class template {
private $tags = [];
private $template;
public function getFile($file) {
if (file_exists($file)) {
$file = file_get_contents($file);
return $file;
} else {
return false;
}
}
public function __construct($templateFile) {
$this->template = $this->getFile($templateFile);
if (!$this->template) {
return "Error! Can't load the template file $templateFile";
}
}
public function set($tag, $value) {
$this->tags[$tag] = $value;
}
private function replaceTags() {
foreach ($this->tags as $tag => $value) {
$this->template = str_replace('{'.$tag.'}', $value, $this->template);
}
return true;
}
public function render() {
$this->replaceTags();
print($this->template);
}
}
我的索引文件是:
require_once 'system/class.template.php';
$tpl = new template('templates/default/main.php');
$tpl->set('username', 'Alexander');
$tpl->set('location', 'Toronto');
$tpl->set('day', 'Today');
$tpl->set('getID', '<?php echo "test"; ?>');
$tpl->render();
我的模板文件是:
<!DOCTYPE html>
<html>
<head></head>
<body>
{getID}
<div>
<span>User Name: {username}</span>
<span>Location: {location}</span>
<span>Day: {day}</span>
</div>
</body>
</html>
您在 php 文件中重新声明 PHP,但没有必要。即你正在尝试打印 <?php
这就是它搞砸的原因。
因此,您可以替换为:
$tpl->set('getID', '<?php echo "test"; ?>');
有了这个
$tpl->set('getID', 'test');
但是,您显然已经知道,您只是想更进一步,方法是在集合中使用 php。所以,作为一个想法,你可以试试这个:
$tpl->set('getID', testfunction());
(你在这里调用 testfunction
顺便定义 'getID'
)
所以,现在你想写一个小函数来做一些花哨的事情,为了这个例子:
function testfunction(){
$a = 'hello';
$b = 'world';
$c = $a . ' ' . $b;
return $c;
}
上面应该 return hello world 代替 {getID}
参考您的评论 - 如果您想更进一步并开始使用 return 结果更高级,您可以执行以下操作:
function testfunction(){
$content = "";
foreach ($a as $b){
ob_start();
?>
<span><?php echo $b->something; ?></span>
<a href="#">Some link</a>
<div>Some other html</div>
<?php
$content += ob_get_clean();
}
return $content
}