【问题标题】:str_replace and preg_replace work on one server but not anotherstr_replace 和 preg_replace 在一台服务器上工作,但不在另一台服务器上工作
【发布时间】:2010-04-01 23:55:02
【问题描述】:

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

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

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

并将其转换为:

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

它所做的一切都是换掉 page.html 部分。

为此,我使用以下方法:

$currentUrl = $this->getCurrentUrl(); // 获取当前 url,即 'http://myurl.com/mypage.html?param1=value1' // 从当前 url 派生一个搜索模式 $模式=“/”。 str_replace(array("/", ".", "-"), array("\\/", "\\.", "\\-"), $currentUrl) 。 "/"; // 去掉'mypage.html' $newUrl = preg_replace($pattern, 'http://myurl.com/', $currentUrl); // 用正确的页面替换问号 $newUrl = str_replace("/?", "/searchpage.html?", $newUrl);

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

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

【问题讨论】:

    标签: php preg-replace str-replace


    【解决方案1】:

    这太令人费解了(很抱歉)。为什么不只是:

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

    【讨论】:

    • 可怕的代码是因为我从几个角度进行测试。您所看到的是拼命尝试让它发挥作用的结果。您提出的代码更简洁 - 问题是我不知道“mypage.html”会是什么。我想我可以分解原始 URL 来推导出它。
    • @retailevolved 也许您应该发布您的实际问题。您也可以使用parse_url() 轻松从 URL 中获取路径。
    • 我已经非常详细地发布了我的问题。我感谢你的贡献。我在本地服务器上对其进行了测试,效果很好。在生产中,这是不行的。
    【解决方案2】:

    你为什么不这样做

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

    比使用正则表达式更好。

    【讨论】:

    • 这在我的测试机器上也很有效,但在生产环境中却不行。我越来越清楚这不是 str_replace / preg_replace 使用的问题,而更可能是环境问题......
    • 你不能“模拟”生产环境上的测试机环境吗?
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多