str_replace和preg_replace在一台服务器上工作,但不在另一台服务器上工作

时间:2010-04-01 23:55:02

标签: php preg-replace str-replace

更新:事实证明,以下是由我的生产服务器上的缓存问题引起的。感谢所有提供深思熟虑答案的人。

我在php页面上有一个简单的函数,它带有一个url,例如:

http://myurl.com/mypage.html?param1=value1

并将其转换为:

http://myurl.com/searchpage.html?param1=value1

所有这一切都换掉了page.html部分。

为此,我使用以下内容:

$currentUrl = $this->getCurrentUrl(); // Grabs the current url, i.e 'http://myurl.com/mypage.html?param1=value1'

// Derive a search pattern from the current url
$pattern = "/" . str_replace(array("/", ".", "-"), array("\\/", "\\.", "\\-"), $currentUrl) . "/";

// get rid of the 'mypage.html'
$newUrl = preg_replace($pattern, 'http://myurl.com/', $currentUrl);

// replace the question mark with the correct page
$newUrl = str_replace("/?", "/searchpage.html?", $newUrl);

上面的代码不是确切的代码,但是很好的代表。它在一台服务器上运行得很漂亮,但是当我推向生产时,preg_replace不起作用。我最初尝试使用str_replace。它也适用于我的本地开发机器,但不适用于生产服务器。

我已确认网址变量正确输入。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这令人非常费解(很遗憾地说)。为什么不呢:

$newUrl = preg_replace('!\bmypage\.html\b!', 'searchpage.html', $oldUrl);

答案 1 :(得分:0)

你为什么不这样做

$pieces = explode('/',$url);
str_replace('mypage','searchpage',$pieces[2]);
$newURL = implode('/',$pieces);

比使用正则表达式更好。