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á?

        $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
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
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
peta:
O tom jsem nevěděl, díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: