0

私はこのテンプレート ファイルを 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);

?>
4

2 に答える 2

1

$replaceコードの問題は、配列でキーを使用していることです。str_replace配列内の位置に基づいて置換するだけなので、キーは何もしません。

したがって、[**banner**]の 2 番目のアイテムとして持っている$searchので、replace の 2 番目のアイテムに置き換えられます。<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);
于 2012-07-14T13:15:03.040 に答える
0

str_replace は正しい関数です。ただし、$replace配列は次のように同じフラット構造体に値を保持する必要があります$search

それで:

$replace = array('Hello World', '<li>Step 1</li><li>Step 2</li>', // an so on    ); 
于 2012-07-14T13:13:24.093 に答える