2012-03-03 9 views
-1

同じ値を持つように見える2つのPHP変数、関数から生成される$ dynamic、および単一引用符で囲まれたテキストである$ testがあります。PHP変数を「プレーン」テキストとして評価する

私はそれらの値を印刷するとき、それらは同じですが、$ダイナミックは正規表現関数で失敗します。

PHPの文字列「ではないダイナミックな」以下は、ちょうど昔ながらのテキスト

$test = 'username'; //Evaluates OK 
die($test.' '.$dynamic); //Produces: username username 

を作るためにどのような方法がありますが関数で、$パターンが問題です。これは実際は以前の質問からですが、私はそれ以来、$ patternの評価に問題を絞り込んできました。これはpreg_replace_callback以外の他の関数の問題でもあるようです。

public function output() { 
if (!file_exists($this->file)) { 
    return "Error loading template file ($this->file).<br />"; 
} 
$output = file_get_contents($this->file); 

foreach ($this->values as $key => $value) { 
    $tagToReplace = "[@$key]"; 
    $output = str_replace($tagToReplace, $value, $output); 


    $dynamic = preg_quote($key); 
    $test = 'username'; 

    $pattern = '%\[if @'.$test.'\](.*?)\[/if\]%'; // produces: %\[if @username\](.*?)\[/if\]% 

    $output = preg_replace_callback($pattern, array($this, 'if_replace'), $output); 
} 

return $output; 

}

+6

"$ dynamicが正規表現関数で失敗する"とはどういう意味ですか?問題を説明する例を追加してください。 –

+1

期待される出力を提供してください –

+1

この機能は見えますか? – Drakekin

答えて

1

$dynamicは目に見えない文字を含めることが可能です。文字列をループし、各文字の文字コードを出力します(ordを使用)。それを"username"の結果と比較してください。それは同様に、文字列の長さが表示されますよう

var_dumpもヒントを与えるかもしれません。

+0

ありがとうございます。良い提案ですが、$ dynamicのvar_dumpは8文字で、ASCIIコードのように見えます。 – jsuissa

関連する問題