[PHP] Probleme avec les regex

WRInaute impliqué
Bonjour,

J'ai une url et je cherche a supprimer le nom de la page ( si elle existe ) tout en gardant le reste de l'arborescence .

Voici quelques exemples basique pour illustrer :

1 www.domaine.com
2 www.domaine.com/repertoire/
3 www.domaine.com/repertoire
4 http://www.domaine.com/repertoire/page.php
5 http://www.domaine.com/repertoire/zeze/ ... p?zeze=zze

Je cherche à avoir comme résultat :

1 www.domaine.com/
2 www.domaine.com/repertoire/
3 www.domaine.com/repertoire/
4 http://www.domaine.com/repertoire/
5 http://www.domaine.com/repertoire/zeze/abc/

Je me tord les cheveux depuis 1 heure avec les regex et je n'arrive pas à trouver de solution adequate .

J'ais aussi cherché du coté de path info ( http://www.php.net/pathinfo ) , mais cela ne m'aide pas .

Exemple avec $path_parts['dirname'];

Code:
$url="http://www.domaine.com/repertoire/page.php";
$path_parts = pathinfo($url);
echo $path_parts['dirname'];

ca affiche http://www.domaine.com/repertoire

C'est ok..... mais....

PAR CONTRE

Code:
$url="http://www.domaine.com/repertoire/";
$path_parts = pathinfo($url);
echo $path_parts['dirname'];

affiche http://www.domaine.com
alors que j'aimerais avoir http://www.domaine.com/repertoire/

bref c'est pour ca que je me suis lancé dans les regex .
Mais je trouve pas de solution .

Quelqu'un peut m'aider ?
 
WRInaute passionné
Les expressions régulières sont inefficaces dans ce cas là.
Je teste si c'est un un répertoire ou non par la présence du / terminal:

$x = substr($path, -1, 1);

S'il n'y a pas de / final, j'utilise pathinfo.
 
WRInaute impliqué
Jeviensderio a dit:
Les expressions régulières sont inefficaces dans ce cas là.

C'est puissant pourtant les regexp :

Pourrais-tu essayer celle-ci ?
$url=preg_replace("`/[^/]+\.[^/]+$`","/",$url);

Je n'ai pas testé, mais si elle ne marche pas on reviendra dessus.... ;)
 
WRInaute impliqué
$url = 'xxx';
$filename = parse_url( $url );
$filename = $filename['file'];
$clean_url = str_replace($filename, '', $url);

A tester ;)

edit: j'avais pas vu le cas des paramètres ?xxx=yyy mais tu dois les retrouver dans le tableau retourné par parse_url()
 
WRInaute impliqué
Toutes vos idées sans regexp ont un défaut, c'est qu'elles traitent -www.domaine.com/repertoire non comme un dossier mais comme un fichier, et renvoient -www.domaine.com/

Stellvia a dit:
2 -www.domaine.com/repertoire/
3 -www.domaine.com/repertoire

C'est le problème du départ.

Au fait, -www.domaine.com existe vraiment ! Il récupère de bons backlinks avec ce post... ;)
 
WRInaute impliqué
Tilt a dit:
Toutes vos idées sans regexp ont un défaut, c'est qu'elles traitent -www.domaine.com/repertoire non comme un dossier mais comme un fichier, et renvoient -www.domaine.com/

if( !ereg('/$', $url) && !ereg('^http:\/\/.+\/.+\..+', $url) ) $url .= '/';

ca résoudrait pas le problème ?

edit : pas sur de la syntaxe mais l'idée est d'ajouter un / à la fin s'il n'y a pas de point (à l'exception du nom de domaine)
 
Discussions similaires
Haut