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á?
1 $target = $request = $_SERVER['REQUEST_URI']; $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: 1Result: Result:
http://aa.cz/aaa//
PHP call:
<?php
$pattern = '~/*$~';
$replacement = '/';
$subject = 'http://aa.cz/aaa/////';
echo preg_replace($pattern, $replacement, $subject, -1 );
?> Priklad 2: 1Result: 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: 1Result: 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) . '/'; $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\']'; $subject = '$_SERVER[\'REQUEST_URI\']'; |
||
peta Profil |
Jeste by to slo takto:
$target = rtrim($target,'/') . '/'; $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: 13 let
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0