【发布时间】:2012-05-08 16:30:43
【问题描述】:
好吧,这个问题似乎超出了我的想象!
我有这个代码:
$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) 并且发生了同样的事情。
【问题讨论】:
-
您使用元字符作为分隔符有什么原因吗?
-
在使用不同的分隔符(例如
/或#)时是否会出现同样的错误? -
我最初使用 / 作为分隔符(这就是为什么我在那里有 str_replace,因为我正在处理 URL)。美元符号是我在尝试解决方案后使用的。
-
@kristovaher:使用与
$不同的分隔符(/很常见),并使用str_replace代替preg_quote($webRoot, '/')
标签: php windows apache preg-replace