OPTIMISATION DE CHAINE POUR RÉÉCRITURE D'URL

cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008 - 22 févr. 2008 à 16:50
hschalle78 Messages postés 4 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 26 octobre 2008 - 26 oct. 2008 à 18:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45820-optimisation-de-chaine-pour-reecriture-d-url

hschalle78 Messages postés 4 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 26 octobre 2008
26 oct. 2008 à 18:47
Twisteurwin > En fait, quand tu te trouves sur la page d'accueil du site Alleraugolf.com et que tu vas sur regions/index2.php, dans ce fichier se trouve la fonction OptimiseURL.
J'affiche les régions grâce à une fonction do...while.
Par contre, lorsque je clique sur une des régions et que je me dirige sur la page des clubs de golf concernés par la région, la fonction n'est pas présente.

Pour afficher les clubs de la région concernée, ( region.php ), cela se passe en plusieurs temps :
1 - Je fais une réquète à partir de la table région pour sélectionner la région que j'ai choisi
2 - Si la 1ère requète est vraie, Je fais une réquète à partir de la table clubs pour afficher les clubs de golf de cette même région.
Par contre, je n'utilise pas la fonction OptimiseURL dans ce deuxième fichier region.php.

J'espère que je suis assez clair dans mes explications. :-)

Merci de ton aide.

A++
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
24 oct. 2008 à 01:42
hschalle78 > pas de quoi, mais ce que tu récupères depuis ta tbl club (un while surrement )tu appliques bien ta fonction non ?
hschalle78 Messages postés 4 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 26 octobre 2008
23 oct. 2008 à 23:06
Merci beaucoup twisteurwin pour ta réponse et le temps que tu y consacres.

En fait pour rentrer dans le détail, quand tu arrives sur la page d'accueil et que tu cliques sur les régions, tu appelles le contenu de la table regions et ensuite lorsque tu cliques sur une région particulière, ca appelle la table clubs pour les clubs de golf étant dans la région sur laquelle l'internaute a cliqué.

Mais en tout cas, il y a une table région et une table clubs avec un champ region.
Ce qui me surprend, c'est que ce que j'ai fait jusqu'à présent fonctionne très bien pour toutes les régions sauf celles qui s'affichent avec des accents ou des espaces, excepté donc pour Rhône-Alpes, Pays de la Loire et Nord Pas de Calais.
Par contre, si tu vas sur les fichiers en ligne regions/index.php, tu verras qu'en cliquant sur n'importe quelle région cela fonctionne mais c'est sans la réécriture d'URL.
Mon problème n'est pas dans la réécriture de l'URL mais dans la récupération du contenu de la table clubs correspondant à la région sélectionnée, dans le cadre de la réécriture.

J'espère que mes explications sont assez claires.

Merci encore une fois de ton aide. Si tu souhaites soumettre le problème à tes potes, n'hésite surtout pas.

A++
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
22 oct. 2008 à 22:09
petite correction adaptée pour ton site:
fichier [.htaccess] v2 :p comme ton index2.php est dans le dossier regions, laisse le htaccess a la racine :)
RewriteEngine on
RewriteRule ^/?regions/golf-([a-zA-Z-]+)\.html$ regions/region.php?region=$1 [NC,L]

voilà bon dev et dis moi si tu as un soucis +++
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
22 oct. 2008 à 21:55
salut hschalle78,

Tu as deux souçis,
1) ton fichier .htaccess
2) tu ne test pas tes var en réception sur la page region.php ( if(isset($_GET['region'])){.... ) apparition de "> inexpliquée...

Voici la solution que je te propose pour ton cas de figure en supposant que ton fichier .htaccess est à la racine de ton site:

fichier [.htaccess]
RewriteEngine on
RewriteRule ^/?golf-([a-zA-Z-]+)\.html$ regions/region.php?region=$1 [NC,L]

fichier [index2.php]
<?php
// ta fonction
function OptimiseUrl($chaine)
{
$chaine = strtolower(strtr($chaine,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ', 'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn'));
$chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine); while (strpos($chaine,'--') !false) $chaine str_replace('--','-',$chaine);
return $chaine;
}
// regions censées etre récupérée de la bdd, ici pour faire des test hein :)
$var1 ='Bretagne';
$var2 ='Centre';
$var3 ='Champagne-Ardenne';
$var4 ='Rhône-Alpes';
$var5 ='Nord Pas de Calais';
$var6 ='Pays de la Loire';

// tes liens
echo '[golf-',OptimiseUrl($var1),'.html ',$var1,']
',"\r\n"
,'[golf-',OptimiseUrl($var2),'.html ',$var2,']
',"\r\n"
,'[golf-',OptimiseUrl($var3),'.html ',$var3,']
',"\r\n"
,'[golf-',OptimiseUrl($var4),'.html ',$var4,']
',"\r\n"
,'[golf-',OptimiseUrl($var5),'.html ',$var5,']
',"\r\n"
,'[golf-',OptimiseUrl($var6),'.html ',$var6,']
',"\r\n";
?>

fichier [region.php] situé dans ton dossier => ./regions/region.php
<?php
// test si la var existe + affichage :p ou non o_O
if(isset($_GET['region'])){echo $_GET['region'];}else{echo 'piti probleme o_O => '.$_GET['region'];}
?>

Fais un test avec ça et adapte à ton site si ca marche :)
hschalle78 Messages postés 4 Date d'inscription mercredi 22 octobre 2008 Statut Membre Dernière intervention 26 octobre 2008
22 oct. 2008 à 20:39
Bonjour,

J'essaie désespérement de mettre en place l'URL rewriting sur mon site alleraugolf.com.
J'y suis presque. Cependant, j'ai des soucis avec les espaces et caractères accentués.
Il y donc trois éléments :
- le site en lui-même
- la page index ( en l'occurence index2.php pour les essais avant mise en ligne )
- le fichier .htaccess

Si vous allez sur la page http://www.alleraugolf.com/regions/index2.php, vous tombez sur la liste des régions. Lorsque l'on pointe la souris sur l'ensemble des régions, la réécriture se fait bien.
Par contre, lorsque l'on clique sur les régions Rhône Alpes, Nord Pas de Calais, et Pays de la Loire, on atterrit sur une page aux bonnes couleurs mais qui n'affiche pas le contenu souhaité, à savoir la liste des golfs de la région concernée.

Pour mettre en place cette réécriture, j'ai donc utilisé deux choses :
- le fichier .htaccess qui contient les éléments suivants :
RewriteEngine on
RewriteRule ^golf-([a-z\-]+)\.html$ /regions/region.php?region=$1 [L]

- la fonction suivante dans le fichier affichant la liste des régions :
function OptimiseUrl($chaine)
{
$chaine = strtolower(strtr($chaine,'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ', 'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn'));
$chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine);
while (strpos($chaine,'--') !false) $chaine str_replace('--','-',$chaine);
return $chaine;
}

Quelqu'un pourrait-il me filer un coup de main pour résoudre mon problème ?

Je vous remercie et reste à votre dispo.

A++
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 févr. 2008 à 18:43
on devrait placer ca sur codyx, on aurait alors une bonne dizaine d'astuces pour repondre a ce probleme... et on pourrait le faire dans plusieurs langages
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
23 févr. 2008 à 18:39
Yop, si la mienne peut intéresser on sait jamais ^^
function convertion_pour_url($chaine){
// convertion des accents => sans accents + trim vire espaces => $chaine
$string = strtr(trim($chaine),
'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ',
'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn');
// convertion des espaces en -
$string = eregi_replace('[^a-z0-9]','-', $string);
return $string;
}
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
22 févr. 2008 à 18:01
vous avez oublier le <? qui doit-etre remplace par <?php
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
22 févr. 2008 à 17:03
@yoman :

$chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine);while (strpos($chaine,'--') !false) $chaine str_replace('--','-',$chaine);

pourrais etre remplacer par :
return preg_replace('#([^a-z0-9_-]|(-){2,})#','-', $chaine); à vue de nez
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
22 févr. 2008 à 16:50
Ouais bon on remplace tout ça en 5 lignes de code maxi et en plus ta fonction ne strip pas tout les caractères qu'on doit éviter dans une url...

Tiens un ptit code que j'ai fais à la vite, on peut surment faire beaucoup mieu..

function OptimiseUrl($chaine)
{
$chaine = strtolower(strtr($chaine,'àâäåãáçéèêëïîìíñöôóòõùûüúÿ', 'aaaaaaceeeeiiiinooooouuuuy'));
$chaine = preg_replace('#[^a-z0-9_-]#','-',$chaine); while (strpos($chaine,'--') !false) $chaine str_replace('--','-',$chaine);
return $chaine;
}

Et ce genre de code vas plus sur codyx.org qu'ici :-/
Rejoignez-nous