Autor Zpráva
Amunak
Profil
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'];
2        $target = preg_replace('~/+~', '/', $target); //remove empty parameters/double slashes
3        $target = preg_replace('~\?.*~', '', $target); //remove the query part
4        $target = preg_replace('~index\.php/?$~i', '', $target); //remove index.php from the end of url
5        $target = preg_replace('~/*$~', '/', $target); //force trailing slash
6        if ($target != $request)
7        {
8            echo('Location: ' . $target);
9        }
        $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:
2http://aa.cz/aaa//
3 
4PHP call:
5<?php
6$pattern = '~/*$~';
7$replacement = '/';
8$subject = 'http://aa.cz/aaa/////';
9echo preg_replace($pattern, $replacement, $subject, -1 );
10?> 
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:
2http://aa.cz/aaa/
3 
4PHP call:
5<?php
6$pattern = '~([^/]+)$|()/+$~';
7$replacement = '$1/';
8$subject = 'http://aa.cz/aaa/////';
9echo preg_replace($pattern, $replacement, $subject, -1 );
10?> 
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:
2http://aa.cz/aaa/
3 
4PHP call:
5<?php
6$pattern = '~([^/]+)$|()/+$~';
7$replacement = '$1/';
8$subject = 'http://aa.cz/aaa';
9echo preg_replace($pattern, $replacement, $subject, -1 );
10?> 
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
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
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
peta:
O tom jsem nevěděl, díky.
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