str_replace ve preg_replace tek bir sunucu üzerinde çalışma ancak başka

2 Cevap php

GÜNCELLEME: Bakılırsa, aşağıda benim üretim sunucusunda bir önbelleğe alma sorununa neden olur. Düşünceli cevaplar katkıda bulunan herkese teşekkürler.

Ben gibi bir url alır php sayfada basit bir işlevi vardır:

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

ve dönüştürür:

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

Bütün o sayfa.html kısmını takas yapar.

Bunu yapmak için, aşağıdaki kullanın:

$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);

Yukarıdaki kod tam kodu değil ama iyi bir temsildir. Bu bir sunucu üzerinde güzel çalışıyor, ancak ben üretime bastığınızda, preg_replace çalışmaz. Ben aslında str_replace kullanmaya çalıştı. Ayrıca ancak üretim sunucusunda, benim yerel kalkınma makinede çalışır.

Ben URL değişkenleri doğru geliyor doğruladı. Herhangi bir fikir?

2 Cevap

Bu korkunç (söylemek için üzgünüm) kıvrık oluyor. Neden sadece:

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

Neden sadece yapmayın

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

İfadelerinin kullanarak çok daha iyi.