[PHP] Probleme avec les regex

Stellvia
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 28 Déc 2004

[PHP] Probleme avec les regex

Message le Mar Juil 01, 2008 14:18

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: Tout sélectionner
$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: Tout sélectionner
$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 ?


bproductiv
WRInaute accro
WRInaute accro
 
Messages: 4146
Inscription: 27 Déc 2004

Message le Mar Juil 01, 2008 14:50

Si ca peut t'aider voici une cheat sheet toute fraiche d'hier :
http://www.addedbytes.com/cheat-sheets/ ... eat-sheet/


Jeviensderio
WRInaute passionné
WRInaute passionné
 
Messages: 1340
Inscription: 29 Sep 2006

Message le Mar Juil 01, 2008 16:15

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.

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Message le Mar Juil 01, 2008 18:45

Jeviensderio a écrit: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.... ;)


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Message le Mar Juil 01, 2008 20:52

$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()


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8304
Inscription: 23 Nov 2005

Message le Mar Juil 01, 2008 21:02

Sinon peut-être bien plus simple : http://www.php.net/manual/fr/function.dirname.php

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Re: [PHP] Probleme avec les regex

Message le Mer Juil 02, 2008 15:56

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 écrit: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... ;)


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: [PHP] Probleme avec les regex

Message le Mer Juil 02, 2008 18:02

Tilt a écrit: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)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


cron