使PHP变量评估为“普通”文本

时间:2012-03-03 22:04:04

标签: php

我有两个似乎具有相同值的PHP变量,$ dynamic是从函数和$ test生成的,它只是单引号中的文本。

当我打印它们的值时它们是相同的,但$ dynamic在正则表达式函数中失败。

有没有办法让PHP字符串'不是动态'而只是简单的旧文本

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

下面是函数,$ pattern是问题。这实际上来自早期的问题,但我已经将问题缩小到$ 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;

}

1 个答案:

答案 0 :(得分:1)

$dynamic可能包含不可见的字符。循环遍历字符串并打印每个字符的字符代码(使用ord) - 并将其与"username"的结果进行比较。

var_dump也可能提供提示,因为它也会显示字符串的长度。