Rewriter juste UN lien, faire savoir la fin de la chaine $

WRInaute discret
Bonjour
Je possède un forum sur lequel j'essaye de Rewriter uniquement 1 Lien sous forme "showforum=1" en "Titre-f1.html"

Voici le code qui concerne la règle de réécriture
Code:
$this->ipsclass->skin['_wrapper'] = preg_replace("'{$boardurl}\?showforum=1'","{$this->ipsclass->vars['board_url']}/Titre-f1.html",$this->ipsclass->skin['_wrapper']);
Ca se passe très bien... Seulement malheureusement cette règle réécrira aussi les lien de type " "showforum=10" "showforum=11" "showforum=12"...

Comment indiquer la fin de la chaine pour que seul "showforum=1" soit réécrit et pas les autres
Merci ;)
 
WRInaute accro
en testant le caractere suivant (ici il ne doit pas etre un chiffre), c'est un peu retord mais ca marche

Code:
$pattern = "#\?showforum=(1)?[^0-9]#i";
 
WRInaute accro
c'est la syntaxe PCRE qu'utilise Apache dans son moteur de réécriture mais les delimitateurs de fin sont differents ( # ou ' pour les PCRE )

... son probleme n'est pas la puisque les délimitateurs sont placés, il est dans la capture.
 
WRInaute discret
KOogar a dit:
en testant le caractere suivant (ici il ne doit pas etre un chiffre), c'est un peu retord mais ca marche

Code:
$pattern = "#\?showforum=(1)?[^0-9]#i";
J'ai teste et malheureusement les liens ne sont pas réécrits, ça n'y fait rien :?
 
WRInaute accro
Code:
<?php

$subjects = "*******?showforum=1*******";
$subjects = preg_replace("#\?showforum=(1)?[^0-9]#i","/Titre-f1.html",$subjects);
print_r("$subjects");
# AFFICHE
#  *******/Titre-f1.html******

$subjects = "*******?showforum=10*******";
$subjects = preg_replace("#\?showforum=(1)?[^0-9]#i","/Titre-f1.html",$subjects);
print_r("$subjects");
# AFFICHE
#  *******?showforum=10*******

?>

Code:
$this->ipsclass->skin['_wrapper'] = preg_replace("'{$boardurl}\?showforum=(1)?[^0-9]'","{$this->ipsclass->vars['board_url']}/Titre-f1.html",$this->ipsclass->skin['_wrapper']);
chez moi ca marche, mais ce n'est pas ca ce que tu veux faire ?
 
WRInaute discret
En effet sans le #i les liens sont bien réécrits Merci à toi ;) sauf que le guillemet derrière n'est pas pris en compte à cause du "?" et on se retrouve avec un lien "http://***Titre.html title="
l'antislash ne résout pas le problème comme avec le "?" de juste avant dans le lien
 
WRInaute accro
Code:
$this->ipsclass->skin['_wrapper'] = preg_replace("'{$boardurl}\?showforum=1[^0-9]'","{$this->ipsclass->vars['board_url']}/Titre-f1.html",$this->ipsclass->skin['_wrapper']);

j'avais mis le "?" au cas ou tu chercherais d'autre valeur que 1( tu n'avais pas donner avant le contenu de la chaine de travail -> "http://***Titre.html title=" ), ca etant enleve le, ca ne changera rien au masque sauf ca devrait prendre en compte le guillement maintenant et matcher avec le masque.
 
WRInaute discret
Voilà je viens de terminer, j'ai réussi en ajouant un secon " derrière un antislash pour qu'il soit pris en compte sans faire bugger le code, ce qui fait à la fin: Titre-f1.html\""
J'espère que ça n'a aucune incidence négative.... sur le premier " qui n'était pas pris en compte juste avant.

Code:
$this->ipsclass->skin['_wrapper'] = preg_replace("'{$boardurl}\?showforum=1[^0-9]'","{$this->ipsclass->vars['board_url']}/Titre-f1.html\"",$this->ipsclass->skin['_wrapper']);

Encore Merci KOogar ;)
 
Discussions similaires
Haut