Autor | Zpráva | ||
---|---|---|---|
Amunak Profil |
#1 · Zasláno: 25. 4. 2012, 12:56:20
Narazil jsem na (zvláštní?) problém. Mám takovýhle kód na opravení pěkných url (odstranění index.php a zdvojených lomítek, + přidání lomítka na konec výrazu. A to je to, co dělá problém. Vyznačený regulár níže má najít 0 nebo více konečných lomítek, a nahradit je jedním. Jenže on tam nacpe dvě. Nějaký nápad, proč to dělá?
$target = $request = $_SERVER['REQUEST_URI']; $target = preg_replace('~/+~', '/', $target); //remove empty parameters/double slashes $target = preg_replace('~\?.*~', '', $target); //remove the query part $target = preg_replace('~index\.php/?$~i', '', $target); //remove index.php from the end of url $target = preg_replace('~/*$~', '/', $target); //force trailing slash if ($target != $request) { echo('Location: ' . $target); } |
||
peta Profil |
echo $target; nic? Je tezke pridat konkretni testovatelny kod?
Jinak se to chova v poradku. Najde shodu 0 nebo vic. Najde 0, prida lomitko. Pak najde 1 a vic a prida dalsi lomitko za dalsi shodu. Je to to same, jako bys napsal toto ~$|/+$~. Prehozenim opacne si nepomuzes ~/+$|$~, protoze najde 1 a vic a pak najde prazdny konec, opet 2 lomitka. http://preg_replace.onlinephpfunctions.com/ Priklad 1: Result: http://aa.cz/aaa// PHP call: <?php $pattern = '~/*$~'; $replacement = '/'; $subject = 'http://aa.cz/aaa/////'; echo preg_replace($pattern, $replacement, $subject, -1 ); ?> Priklad 2: Result: http://aa.cz/aaa/ PHP call: <?php $pattern = '~([^/]+)$|()/+$~'; $replacement = '$1/'; $subject = 'http://aa.cz/aaa/////'; echo preg_replace($pattern, $replacement, $subject, -1 ); ?> Priklad 3: Result: http://aa.cz/aaa/ PHP call: <?php $pattern = '~([^/]+)$|()/+$~'; $replacement = '$1/'; $subject = 'http://aa.cz/aaa'; echo preg_replace($pattern, $replacement, $subject, -1 ); ?> |
||
Amunak Profil |
#3 · Zasláno: 26. 4. 2012, 09:19:33
peta:
Ten kód je testovatelný, header() je púřepsané na echo(). Nakonec jsem to vyřešil tak, že jsem použil $target = preg_replace('~/+$~', '', $target) . '/'; |
||
peta Profil |
#4 · Zasláno: 26. 4. 2012, 14:48:43
Dobre reseni.
$_SERVER['REQUEST_URI'] - Na kazdem pc hodi jinou adresu. Takze, kdyz to budu testovat, budu mit jine vstupni parametry do scriptu nez ty. A treba mi ma verze php tam neda lomitko. Kdyz ten text dam do zminene stranky, tak mi z toho udela retezec, coz je tez na houby :) $subject = '$_SERVER[\'REQUEST_URI\']'; |
||
peta Profil |
Jeste by to slo takto:
$target = rtrim($target,'/') . '/'; |
||
Amunak Profil |
#6 · Zasláno: 28. 4. 2012, 10:22:43
peta:
O tom jsem nevěděl, díky. |
||
Časová prodleva: 12 let
|
0