Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

OPTIMISATION DE CHAINE POUR RÉÉCRITURE D'URL


Description

Ce code est une petite fonction qui permet d'optimisé une chaine de caractére pour la placer dans une url, pour faire de la réécriture d'url (url rewriting) par exemple  par exemple.

Utilisation:

$Titre ="Salut & merci pour vos commentaire";
$TitreUrl=OptimiseUrl($Titre);

$url='page-'.$TitreUrl.'.html'; //page-salut-merci-pour-vos -commentaire.html
 

Source

  • <?
  • function OptimiseUrl($chaine)
  • {
  • $chaine=strtolower($chaine);
  • $accents = Array("/é/", "/è/", "/ê/", "/ç/", "/à/", "/â/", "/î/", "/ï/", "/ù/", "/ô/");
  • $sans = Array("e", "e", "e", "c", "a", "a", "i", "i", "u", "o");
  • $chaine = preg_replace($accents, $sans,$chaine);
  • $entre = array(' ', '?', '!', '.', ',', ':', "'", '&', '(', ')', '"','/');
  • $sortie = array('-', '-', '-', '-', '-', '-', '-', '-', '-', '-','-');
  • $chaine = str_replace($entre, $sortie, $chaine);
  • $modifchaine=true;
  • while($modifchaine==true)
  • {
  • $modifchaine=false;
  • if(ereg('--',$chaine))
  • {
  • $chaine = str_replace('--','-',$chaine);
  • $modifchaine=true;
  • }
  • }
  • return $chaine;
  • }
  • ?>
<?
function OptimiseUrl($chaine)
{	

	$chaine=strtolower($chaine);
	
	$accents = Array("/é/", "/è/", "/ê/", "/ç/", "/à/", "/â/", "/î/", "/ï/", "/ù/", "/ô/");
	$sans = Array("e", "e", "e", "c", "a", "a", "i", "i", "u", "o");
	
	$chaine = preg_replace($accents, $sans,$chaine);	
	
	
	$entre = array(' ', '?', '!', '.', ',', ':', "'", '&', '(', ')', '"','/');
	$sortie = array('-', '-', '-', '-', '-', '-', '-', '-', '-', '-','-');
	$chaine = str_replace($entre, $sortie, $chaine);
	
    
    $modifchaine=true;
    while($modifchaine==true) 
	{
		$modifchaine=false;
		
		if(ereg('--',$chaine))
		{
		    $chaine = str_replace('--','-',$chaine);
		    $modifchaine=true;	    
		}
	}
    
    return $chaine; 
}
?>

Conclusion

Laissez des commentaires pour toutes questions où suggestions d'améliorations.
 

Commentaires et avis

signaler à un administrateur
Commentaire de yoman64 le 22/02/2008 16:50:57

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

signaler à un administrateur
Commentaire de garfield90 le 22/02/2008 17:03:34

@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

signaler à un administrateur
Commentaire de coucou747 le 22/02/2008 18:01:59

vous avez oublier le <? qui doit-etre remplace par <?php

signaler à un administrateur
Commentaire de twisteurwin le 23/02/2008 18:39:55

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;
}

signaler à un administrateur
Commentaire de coucou747 le 23/02/2008 18:43:05

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

signaler à un administrateur
Commentaire de hschalle78 le 22/10/2008 20:39:46

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++

signaler à un administrateur
Commentaire de twisteurwin le 22/10/2008 21:55:07

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 '<h1><a href="golf-',OptimiseUrl($var1),'.html">',$var1,'</a></h1>',"\r\n"
,'<h1><a href="golf-',OptimiseUrl($var2),'.html">',$var2,'</a></h1>',"\r\n"
,'<h1><a href="golf-',OptimiseUrl($var3),'.html">',$var3,'</a></h1>',"\r\n"
,'<h1><a href="golf-',OptimiseUrl($var4),'.html">',$var4,'</a></h1>',"\r\n"
,'<h1><a href="golf-',OptimiseUrl($var5),'.html">',$var5,'</a></h1>',"\r\n"
,'<h1><a href="golf-',OptimiseUrl($var6),'.html">',$var6,'</a></h1>',"\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 :)

signaler à un administrateur
Commentaire de twisteurwin le 22/10/2008 22:09:27

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 +++

signaler à un administrateur
Commentaire de hschalle78 le 23/10/2008 23:06:36

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++

signaler à un administrateur
Commentaire de twisteurwin le 24/10/2008 01:42:12

hschalle78 > pas de quoi, mais ce que tu récupères depuis ta tbl club (un while surrement )tu appliques bien ta fonction non ?

signaler à un administrateur
Commentaire de hschalle78 le 26/10/2008 18:47:16

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++  

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Taille d'une chaine de caractere [ par g0belin ] Comment savoir la Taille d'une chaine de caractere???Je sais que en delphi il faut faire lenght(nom_de_ma_chaine)merci d'avance Longueur de chaine... [ par ElfeNoir ] Bonjour!En résumé : j'ai créé une page de format pdf, (en php), avec un tableau qui est renseigné par une bdd, le problème que je rencontre est de ca extrairees lettres ou numeros d\\'une chaine [ par apz ] sltm, j'ai la chaine de caractere suivante : $str="m13_19" je voulais recuperer seulement les lettres de cette chaine en utilisant SETTYPE : $lett=set extrairees lettres ou numeros d'une chaine [ par apz ] sltm, j'ai la chaine de caractere suivante : $str="m13_19" je voulais recuperer seulement les lettres de cette chaine en utilisant SETTYPE : $lett=set chaine 2 caract [ par saad123 ] salut!!!kelkun pourré me dire comment couper une chaine de caractère avec certains critèreexemple : g une variable avec dedans http://www.ouah.com et couper une chaine de car [ par saad123 ] salut!!!kelkun pourré me dire comment couper une chaine de caractère avec certains critèreexemple : g une variable avec dedans http://www.ouah.com et Recherche d'une chaine de caractère dans un fichiers et affichage du paragraphe contenant la chaine? [ par dolu007 ] j'ai besoin de programmer un logiciel qui va me permettre de rechercher un mot ou une chaine de caractèredans un fichier lui meme contenu dans un répe fonction ki koup !! [ par saad123 ] salut!!!voila je cherche a couper une chaine de caractere trop longue, ya til une fonction pour couper une chaine au caractère n ???merci forme ereg, eregi, ereg_replace, eregi_replace [ par apz ] salut,j'aimerais bien comprendre les expressions regulieres (ereg, ereg_replace, eregi, eregi_replace).j'ai lu la documentation et voila ce que j'ai c chaine de caractère ... ? [ par Joez ] Bonjour, voila comment recupérer ce qu'il y a entre les 2 balises de cette chaine de caractere ?&lt;DATE_ACQUISITION&gt;200304&lt;/DATE_ACQUISITION&gt


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.