IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Réecriture automatique d'URL


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Réecriture automatique d'URL
    Bonsoir à tous,

    Je suis en train de développer un site, en utilisant l'URL rewriting. Mais au lieu d'écrire l'url modifié dans le code HTML, je veux que ça soit automatique en utilisant les expressions régulières avec preg_match_all() et le remplacement avec sprintf().

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    <?php
    //code simplifié
     
    $url="index.php?lg=fr";
     
    function rewriteURL($url) {
     
    	$extension=".html";
     
    	if(preg_match_all("#index\.php\?lg=([a-z]{2})#Ui", $url, $matche, PREG_PATTERN_ORDER)) {
    		$format="lg-%s";
    		return sprintf($format, $matche[1][0]).$extension;
    	}
     
    	return $url;
    }
     
    echo rewriteURL($url);
    ?>
    Dans ce cas, l'url est bien retournée. Mais en ayant par exemple :

    $url = "index.php?lg=fr&test=toto";

    L'url retourné est celle donné par sprintf, et non pas du dernier return (comme je l'esperais) qui devrait être l'url de départ.
    J'ai bien mis l'option Ungreedy, mais ça déconne quelque part (enfin, c'est moi plutôt) et je n'arrive pas a trouver ou.

    L'idée est d'avoir plusieurs if avec des preg_match_all et de trouver la regex qui correspond à l'URL, mais si ça bloque déjà sur la première regex ça va pas :/

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Vous devriez ajouter dans ce cas les ancrages de début (^) et fin de ligne (ou texte si le flag m est présent) ($) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match_all("#^index\.php\?lg=([a-z]{2})$#Ui", ...
    Mais dans ce cas là, la fonction preg_match suffira.


    En espérant avoir bien saisi votre problème, Julp.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Ah merci !

    j'ai pas pensé à utiliser ^ $...

    voilà ma fonction a quoi elle ressemblera en gros au final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function rewriteURL($url) {
     
    	$extension=".html";
     
    	switch(TRUE) {
    		case (preg_match_all("#^index\.php\?lg=(\w*)$#Ui", $url, $matche, PREG_PATTERN_ORDER)) :
    			$format="%s/";
    			return sprintf($format, $matche[1][0]).$extension;
    			break;
    		case (preg_match_all("#^index\.php\?lg=(\w*)&rub=(\w*)$#Ui", $url, $matche, PREG_PATTERN_ORDER)) :
    			$format="%s/test-%s";
    			return sprintf($format, $matche[1][0], $matche[2][0]).$extension;
    			break;
    		case (preg_match_all("#^index\.php\?lg=(\w*)&rub=(\w*)&srub=(\w*)$#Ui", $url, $matche, PREG_PATTERN_ORDER)) :
    			$format="%s/rub-%s/srub-%s";
    			return sprintf($format, $matche[1][0], $matche[2][0], $matche[3][0]).$extension;
    			break;			
    		default:
    			return $url;
    	}
    }

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    voilà ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     function rewriteURL($url) {
     
        $url=delaccent($url);
     
        $extension=".html";
        $separateur="-";
     
        switch(TRUE) {
            case (preg_match_all("#^index\.php\?lg=(\w{2})$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
                $format="%s";
                $urlrewrite = sprintf($format, $matche[1][0]).$extension;
                break;
     
            case (preg_match_all("#^index\.php\?lg=(\w{2})&rub=([\w-]*)$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
                $format="%s/test-%s";
                $urlrewrite = sprintf($format, $matche[1][0], $matche[2][0]).$extension;
                break;
     
            case (preg_match_all("#^index\.php\?lg=(\w{2})&rub=([\w-]*)&srub=([\w-]*)$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
                $format="%s/rub-%s/srub-%s";
                $urlrewrite = sprintf($format, $matche[1][0], $matche[2][0], $matche[3][0]).$extension;
                break;    
            default:
                $urlrewrite = $url;
        }
     
        return $urlrewrite;
    }
    dans ce cas, je dois faire comme dans le .htaccess : ecrire tous les masques correspondant à mes URL.

    Mais pour que ça soit plus simple, je voudrais avoir un tableau qui me retourne le nom de la page, les arguments, et les valeurs des arguments. Donc j'en suis arrivé à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("#^([\w-\.]+)\?(([\w-]+)=([\w-]*)(&?)+)$#si", $url, $matched, PREG_SET_ORDER);
    Le problème c'est que ça ne marche pas vraiment et que je ne connais pas les regex à fond... Alors si quelqu'un à une idée pour résoudre ça, c'est cool.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/09/2011, 20h25
  2. [MediaWiki] Login automatique par url
    Par cat69 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 18/02/2011, 12h27
  3. Ouvrir automatiquement une URL
    Par reeda dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 13/11/2008, 15h05
  4. [MySQL] Retour automatique vers url
    Par thannane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/02/2007, 13h43
  5. login automatique via url
    Par Groovygirl dans le forum ASP
    Réponses: 3
    Dernier message: 23/06/2006, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo