0

htmlをレンダリングするための一連の関数を含むテンプレート.phpファイルがあります。スニペットは次のとおりです。

$j ='    
table("tb_02", "600", "", "ebebeb", "right", "top", "30 0 30 0","Table content...");
//whole bunch of similar functions here...
';

テーブル関数は次のようになります。

    function table($tbID, $tbWidth, $tbHeight, $tbBgColor, $tbHzAlign, $tbVtAlign, $tbPad, $tbContent) {
// code omitted here     
$a = "
          <table id=\"$tbID\" width=\"$tbWidth\" $tbHeight $tbBgColor border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
            <tr>
              <td valign=\"$tbVtAlign\" align=\"$tbHzAlign\" width=\"$tbWidth\" style=\"$pad\">
        $tbContent
              </td>
            </tr>
          </table>  
        "; 
          echo $a;
        };

私がやりたいのは、テンプレート.phpファイル(htmlのみ-phpなし)の$jの結果を文字列に変換することです。私が抱えている問題は、最初にそれを評価する必要があるということです(関数の結果、次にそれを変換します)。私はこのようなものを求めていますが、評価されたコードを文字列に戻す方法を見つけることができません:

$j = eval($j);
$j = str_replace("<", "&lt;", $j);
$j = str_replace(">", "&gt;", $j);
echo $j;

助けてくれてありがとう!

4

1 に答える 1

1

evalテンプレートシステムではありません。速度が遅く、安全ではないため、使用しないでください。物事を行うためのより良い方法は常にあります。

実際のテンプレートシステムを探し回ることをお勧めします。あなたがしていることは非常に悪い習慣です。

まず、関数はreturnデータを使用するのではなく、データを使用する必要がありますecho。そうすれば、あなたはそれを操作することができ、そしてechoそれを一度にすべて出すことができます。

第二に、HEREDOCsを見てください、彼らはあなたの人生を楽にするでしょう。

function table($tbID, $tbWidth, $tbHeight, $tbBgColor, $tbHzAlign, $tbVtAlign, $tbPad, $tbContent) {
    // code omitted here     
    $a = <<<HTML
    <table id="$tbID" width="$tbWidth" $tbHeight $tbBgColor border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td valign="$tbVtAlign" align="$tbHzAlign" width="$tbWidth" style="$pad">$tbContent</td>
        </tr>
    </table>
HTML;

    return $a;
}

最後に、弦を張ろうとするべきではありませんeval。それはパッドの練習です。私の提案は良い習慣ではないかもしれませんが、それよりはましですeval

$j文字列ではなく、配列にしてみてください。

$j = array(
    'table' => array("tb_02", "600", "", "ebebeb", "right", "top", "30 0 30 0","Table content...")
);

これでできることはcall_user_func_array、コードを「評価」するために使用することです。

$html = '';

foreach($j as $func=>$args){
    $x = call_user_func_array($func, $args);

    $x = str_replace("<", "&lt;", $x);
    $x = str_replace(">", "&gt;", $x);

    $html .= $x;
}

echo $html;
于 2012-12-04T22:04:32.613 に答える