str_replace e preg_replace lavoro su un server, ma non un altro
-
23-09-2019 - |
Domanda
UPDATE: Come si è visto, il seguito è causato da un problema di cache sul mio server di produzione. Grazie a tutti coloro che hanno fornito le risposte riflessivo.
Ho una funzione semplice in una pagina php che prende un URL, ad esempio:
http://myurl.com/mypage.html?param1=value1
e lo converte in:
http://myurl.com/searchpage.html?param1=value1
Tutto ciò che fa è scambiare la porzione page.html.
Per fare questo, io uso il seguente:
$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);
Il codice di cui sopra non è il codice esatto, ma è una buona rappresentazione. Esso funziona in modo bello su un unico server, ma quando spingo per la produzione, il preg_replace non funziona. All'inizio ho cercato di usare str_replace. Funziona anche sulla mia macchina di sviluppo locale, ma non sul server di produzione.
mi hanno confermato che le variabili URL stanno arrivando in modo corretto. Tutte le idee?
Soluzione
Questo è orribilmente contorto (dispiace dirlo). Perché non solo:
$newUrl = preg_replace('!\bmypage\.html\b!', 'searchpage.html', $oldUrl);
Altri suggerimenti
Perché non basta fare
$pieces = explode('/',$url);
str_replace('mypage','searchpage',$pieces[2]);
$newURL = implode('/',$pieces);
Meglio di utilizzare espressioni regolari.