我将此模板文件作为HTML并愿意用正确的内容替换所有匹配的标签,例如[**title**]
等,然后将其作为PHP文件写入磁盘。我已经完成了一系列搜索,似乎没有一个符合我的目的。以下是HTML代码。问题是它并不总是取代正确的标签?
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>[**title**]</title>
</head>
<body>
<!--.wrap-->
<div id="wrap">
<!--.banner-->
<div class="banner">[**banner**]</div>
<!--/.banner-->
<div class="list">
<ul>[**list**]</ul>
</div>
<!--.content-->
<div class="content">[**content**]</div>
<!--/.content-->
<!--.footer-->
<div class="footer">[**footer**]</div>
<!--/.footer-->
</div>
<!--/.wrap-->
</body>
</html>
这是我到目前为止所尝试过的。
<?php
$search = array('[**title**]', '[**banner**]', '[**list**]'); // and so on...
$replace = array(
'title' => 'Hello World',
'list' => '<li>Step 1</li><li>Step 2</li>', // an so on
);
$template = 'template.html';
$raw = file_get_contents($template);
$output = str_replace($search, $replace, $raw);
$file = 'template.php';
$file = file_put_contents($file, $output);
?>
答案 0 :(得分:1)
代码中的问题是您在$replace
数组中使用了密钥。 str_replace
只是根据数组中的位置进行替换,因此键不执行任何操作。
因此,您[**banner**]
中的$search
作为第二项,因此它将替换为替换中的第二项,即<li>Step 1</li><li>Step 2</li>.
如果您想通过密钥自动执行此操作(因此[**foo**]
总是替换为$replace['foo']
,您可能需要查看使用正则表达式。我敲了一段快速的代码当我测试它,但可能有错误:
<?php
function replace_callback($matches) {
$replace = array(
'title' => 'Hello World',
'list' => '<li>Step 1</li><li>Step 2</li>', // an so on
);
if ( array_key_exists($matches[1], $replace)) {
return $replace[$matches[1]];
} else {
return '';
}
}
$template = 'template.html';
$raw = file_get_contents($template);
$output = preg_replace_callback("/\[\*\*([a-z]+)\*\*\]/", 'replace_callback', $raw);
$file = 'template.php';
$file = file_put_contents($file, $output);
答案 1 :(得分:0)
str_replace是正确的功能。
但是$replace
数组必须将值保存在与$search
所以:
$replace = array('Hello World', '<li>Step 1</li><li>Step 2</li>', // an so on );