2012-03-03 123 views
-1

我有兩個似乎具有相同值的PHP變量,$ dynamic是從函數產生的,$ test是單引號中的文本。使PHP變量評估爲'純文本'

當我打印它們的值時,它們是相同的,但$動態在正則表達式函數中失敗。

有沒有什麼辦法讓一個PHP字符串「不動」,只是普通的舊文本

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

下面是函數,$模式是問題。這實際上是從一個較早的問題,但我已經把問題縮小到$模式的評估。除了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

你是什麼意思「$動態在正則表達式函數失敗」?請添加一個例子來說明問題。 – 2012-03-03 22:05:19

+1

提供預期的輸出 – 2012-03-03 22:05:53

+1

我們可以看到該功能嗎? – Drakekin 2012-03-03 22:06:14

回答

1

這是可能$dynamic可能包含不可見字符。循環字符串並打印每個字符的字符代碼(使用ord) - 並將其與"username"的結果進行比較。

var_dump也可能會給出提示,因爲它也會顯示字符串的長度。

+0

謝謝。好的建議,$ dynamic的var_dump有8個字符,看起來像ASCII碼是一樣的。 – jsuissa 2012-03-03 22:21:43