好吧,这个问题似乎超出了我的想象!
我有这个代码:
$request=preg_replace('$(^'.str_replace('$','\$',$webRoot).')$i','',$requestUri);
这给我一个错误:
preg_replace(): 没有找到结束分隔符 '$'
但事情是这样的,结束分隔符肯定在那里。
在那个函数调用之后,我回显了以下内容:
echo $webRoot;
echo $requestUri;
echo '$(^'.str_replace('$','\$',$webRoot).')$i';
这是这些回声的结果:
/
/en/example/
$(^/)$i
有趣的是,如果我直接这样做:
preg_replace('$(^/)$i','',$requestUri);
..有用。但这也失败了:
$tmp=str_replace('$','\$',$webRoot);
preg_replace('$(^'.$tmp.')$i','',$requestUri);
为了彻底起见,我还测试了 echo $tmp 给出的内容,它确实给出了正确的值:
/
它是 Windows 中 PHP 的错误吗?我在 Linux 服务器上试用了它,它按预期工作,它没有抛出这个错误。还是我错过了什么?
只是为了确保,我什至将 PHP 更新到最新的 Windows 版本(5.4.2),同样的事情发生了。