我有两个PHP变量似乎有相同的值,$dynamic是由函数生成的,$test只是单引号中的文本。
当我打印它们的值时,它们是相同的,但$dynamic在regex函数中失败。
有没有什么方法可以让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;
}
$dynamic
可能包含不可见字符。循环字符串并打印每个字符的字符代码(使用ord
),并将其与"username"
的结果进行比较。
var_dump
也可能给出提示,因为它也会显示字符串的长度。