2017-07-17 68 views
0

我想知道是否有一種方法在字符串內部進行自動變量替換。我現在可以用preg_replacestrtr來模擬這個,但我不確定是否有更好的方法。我正在考慮使用eval,但似乎無法弄清楚如何正確使用它。php - 自動字符串模板

strtr

<?php 
    $replacement = array('$test' => "dog"); 
    $template = 'this is a $test'; 
    $statement = strtr($template, $replacement); 
    echo $statement; 
?> 

preg_replace

<?php 
    $template = 'this is a $test'; 
    $statement = preg_replace('/\$test/', 'dog', $template); 
    echo $statement; 
?> 

eval想法

<?php 
    $template = 'this is a $test'; 
    $test = 'dog'; 
    eval('$statement = "$template";'); 
    echo $statement; 
?> 
+0

你必須是非常,非常,非常,非常小心使用'EVAL之前驗證您的字符串到最高程度()'。 'eval()'可能會讓你的網站更容易被黑客竊取。使用'eval()'並不違法,但由於漏洞通常會極力阻止它。我會敦促你制定'eval()'你的計劃Z - 只有當其他一切不能按你的要求執行時才能使用。 – mickmackusa

+0

其他兩種功能在任何特定情況下都會使你失敗嗎?他們似乎是這項任務的明智選擇。 – mickmackusa

+0

@mickmackusa我想這會更快,不確定。 'eval'應該是安全的,因爲它們是我定義自己的變量。不是用戶/客戶端輸入。 –

回答

1

eval()是evalute一個字符串,如果是PHP代碼。所以,如果你做的事:因爲你會在事實上做到這一點

Parse error: syntax error, unexpected 'is' (T_STRING)

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

this is a $test; 

echo $template; 

?> 

因此,相反,你需要將其評價爲

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

eval($template); 
echo $template; 

?> 

你會得到一個語法錯誤一個用雙引號括起來的字符串,以便將變量替換爲其值:

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

eval("\$template = \"$template\";"); 

echo $template; 

?> 

這將是這樣的:

<?php 

$template = 'this is a $test'; 
$test = 'dog'; 

$template = "this is a $test"; 

echo $template; 

?>