我有两个似乎具有相同值的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;
}
答案 0 :(得分:1)
$dynamic
可能包含不可见的字符。循环遍历字符串并打印每个字符的字符代码(使用ord
) - 并将其与"username"
的结果进行比较。
var_dump
也可能提供提示,因为它也会显示字符串的长度。