Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3132 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Regex] Réecriture automatique d'URL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Regex] Réecriture automatique d'URL

n°1453659
Surfoo
Ça va ? ok.
Posté le 06-10-2006 à 22:49:18  profilanswer
 

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 strpintf().
 
exemple :
 

Code :
  1. <?php
  2. //code simplifié
  3. $url="index.php?lg=fr";
  4. function rewriteURL($url) {
  5. $extension=".html";
  6. if(preg_match_all("#index\.php\?lg=([a-z]{2})#Ui", $url, $matche, PREG_PATTERN_ORDER)) {
  7.  $format="lg-%s";
  8.  return sprintf($format, $matche[1][0]).$extension;
  9. }
  10. return $url;
  11. }
  12. echo rewriteURL($url);
  13. ?>


 
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 :/


Message édité par Surfoo le 06-10-2006 à 22:52:37
mood
Publicité
Posté le 06-10-2006 à 22:49:18  profilanswer
 

n°1453779
supermofo
Hello World !
Posté le 07-10-2006 à 13:47:10  profilanswer
 

Je pige pas pourquoi tu te compliques a rajouter une fonction qui rewrite tes Url dans ta page.
 
Pourquoi ne pas mettre directement les URL rewritées dans ton code plutot ?
 
 
Edit: Ca se passe sur Free  :p


Message édité par supermofo le 07-10-2006 à 13:48:17
n°1453879
omega2
Posté le 07-10-2006 à 20:21:06  profilanswer
 

supermofo > peut être qu'il veut que ca passe sur un serveur avec le rewriting d'URL et sur un autre sans.

n°1453937
Surfoo
Ça va ? ok.
Posté le 08-10-2006 à 14:31:32  profilanswer
 

Ca n'est pas le sujet mais je vais répondre quand même :
- Pour pouvoir changer facilement le format de l'url sans aller dans toutes les pages du site.
- Activer ou désactiver l'URL rewriting facilement
- Le système de back office (pas réalisé par moi) pour écrire des liens internes au site n'utilise pas l'url rewriting mais les URL normales (exemple : index.php?lg=fr&rub=01&srub=02)
 
Donc tout ça pour dire que j'aimerais bien ce système de masque pour avoir les liens réecrit.
 
Donc pour l'instant j'ai modifié ma fonction, et ça fonctionne : (j'avais pas mis ^ et $)

Code :
  1. function rewriteURL($url) {
  2.    
  3.     $url=delaccent($url);
  4.    
  5.     $extension=".html";
  6.     $separateur="-";
  7.    
  8.     switch(TRUE) {
  9.         case (preg_match_all("#^index\.php\?lg=(\w{2})$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
  10.             $format="%s";
  11.             $urlrewrite = sprintf($format, $matche[1][0]).$extension;
  12.             break;
  13.            
  14.         case (preg_match_all("#^index\.php\?lg=(\w{2})&rub=([\w-]*)$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
  15.             $format="%s/test-%s";
  16.             $urlrewrite = sprintf($format, $matche[1][0], $matche[2][0]).$extension;
  17.             break;
  18.            
  19.         case (preg_match_all("#^index\.php\?lg=(\w{2})&rub=([\w-]*)&srub=([\w-]*)$#Usi", $url, $matche, PREG_PATTERN_ORDER)) :
  20.             $format="%s/rub-%s/srub-%s";
  21.             $urlrewrite = sprintf($format, $matche[1][0], $matche[2][0], $matche[3][0]).$extension;
  22.             break;   
  23.         default:
  24.             $urlrewrite = $url;
  25.     }
  26.    
  27.     return $urlrewrite;
  28. }


 
donc 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 :
  1. 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  :jap:

n°2140283
flirtetcom​pagnie
apprenti en php :)
Posté le 03-05-2012 à 04:47:19  profilanswer
 

c'est pas plus simple avec un .htaccess ??


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Regex] Réecriture automatique d'URL

 

Sujets relatifs
[RegEx]Comment capturer tout en excluant certaines chaînes?Résolu - Afficher dans ma page une valeur pointée par une URL
Url rewriting encore...modification de tag id3 automatique
Regex pour parser template php[bash] enlever les questions dans la completion automatique ?
Fonction qui recupere toutes la barre URLExecuter une URL sans y être redirigé
URL des radios ! 
Plus de sujets relatifs à : [Regex] Réecriture automatique d'URL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR