[résolu]str_replace et URL

WRInaute occasionnel
Bonjour,

j'utilise $nom=str_replace("-"," ",$nom); pour remplacer les espaces dans les url par - , mais je me suis aperçu que les é sont mal affichés aussi et il y a sûrement d'autre .

Est qu'il est possible de me donner un str_replace qui renferme la majorité des possibilitées?

Merci
 
WRInaute accro
Salut hm19582 :D

Juste en passant, c'est l'inverse si tu veux remplacer les " " par "-" :)

$nom=str_replace(" ","-",$nom);
 
WRInaute passionné
Avec cette petite fonction, ça devrait le faire :
Code:
<?php
function reecritureUrl($nom)
{
	$accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
	$noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
	$reecriture=strtr(trim($nom),$accent,$noAccent);
	$url=preg_replace("# #","-",$reecriture);
	return  $url;
}
// Voilà ce que ça donne
$nom="bête et méchant";
echo reecritureUrl($nom);
?>
Voili, voilou ! :wink:
 
WRInaute impliqué
Moi j'apporterais quelques corrections supplémentaires au code de david, ce qui donnerais ceci :

Code:
<?php 
function reecritureUrl($nom) 
{ 
   $accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ"; 
   $noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby"; 
   $reecriture=strtr(trim($nom),$accent,$noAccent); 
   $url=preg_replace('/[^0-9a-z]/', ' ', strtolower($reecriture));
   $url=preg_replace('/ +/', '-', trim($url)); 
   return  $url; 
} 
// Voilà ce que ça donne 
$nom="bête et méchant"; 
echo reecritureUrl($nom); 
?>

Ce qui aura pour effet de supprimer tout ce qui est autres caractères bizarre tel que les ! . + etc.. mais aussi les deux espaces.

Je pense qu'il y a encore possibilité de l'améliorer :)

A+
 
WRInaute passionné
Merci de ta participation ! :D
Par contre, pour la fonction strtolower(), je pense qu'elle est en trop, effectivement, rien n'empêche de mettre des majuscules dans l'url-rewriting :wink:

rectifions donc :) :
Code:
$url=preg_replace('/[^0-9a-zA-Z]/', ' ', $reecriture);
 
WRInaute occasionnel
YoyoS a dit:
Salut hm19582 :D

Juste en passant, c'est l'inverse si tu veux remplacer les " " par "-" :)

$nom=str_replace(" ","-",$nom);

j'utilise $nom=str_replace("","-",$nom) dans lien puis dans la page suivante qui reçoit la variable je mais $nom=str_replace("-"," ",$nom)


Merci Sir Dipp c tous a fait ce que cherche :wink:
 
WRInaute occasionnel
J'ai trouvé une petite difficuler pour mettre cette fonction , je veut l'utiliser avec mysql :


Code:
$requet = mysql_query('SELECT nom FROM base ORDER BY id DESC);
	 
$donnee=mysql_fetch_array($requet);
$nom=$donnee['nom'];
    
    
function reecritureUrl($nom)
{
   $accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
   $noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
   $reecriture=strtr(trim($nom),$accent,$noAccent);
   $url=preg_replace("# #","-",$reecriture);
   return  $url;
}
// Voilà ce que ça donne

echo reecritureUrl($nom);


mais le resultat s'affiche avec une é, quand j'affiche la source de la page html j'ai &eacute; au lien de é comment faire ?
 
WRInaute passionné
Salut,
Je déterre un peut le topic.
Sir Dipp a dit:
Moi j'apporterais quelques corrections supplémentaires au code de david, ce qui donnerais ceci :

Code:
<?php 
function reecritureUrl($nom) 
{ 
   $accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ"; 
   $noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby"; 
   $reecriture=strtr(trim($nom),$accent,$noAccent); 
   $url=preg_replace('/[^0-9a-z]/', ' ', strtolower($reecriture));
   $url=preg_replace('/ +/', '-', trim($url)); 
   return  $url; 
} 
// Voilà ce que ça donne 
$nom="bête et méchant"; 
echo reecritureUrl($nom); 
?>
J'ai un petit soucis sur cette fonction: mes "é" sont remplacés par des "b".
Si j'écris le mot "créer" j'obtient "crb-er" .. pouvez vous me dire pourquoi svp ?
merci
 
WRInaute passionné
Bacteries a dit:
Regarde si au même index que ton "é" (dans $accent) correspond un "e" dans $noAccent.

Oui c'est bon, sa concorde 8O . J'utilise htmlentities() pour enregister en bd.
Code:
<?php

//fonction de transformation de chaine de caractères
function reecritureUrl($lien)
{
   $accent="ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ";
   $noAccent="aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyyby";
   $reecriture=strtr(trim($lien),$accent,$noAccent);
   $url=preg_replace('/[^0-9a-z]/', ' ', strtolower($reecriture));
   $url=preg_replace('/ +/', '-', trim($url));
   return  $url;
}

include("data_bd.php");

mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de s&eacute;lectionner une base de donn&eacute;e. Assurez vous d\'avoir 

correctement remplit les donn&eacute;es du fichier data_bd.php.');

$query = mysql_query("SELECT id, titre_de_la_page FROM PAGE_DU_SITE WHERE 

categorie_de_la_page='".mysql_real_escape_string($idtransmit)."'");

$id_de_la_page="";
$titre_de_page="";

while($titrepage = mysql_fetch_array($query))
 {
   $id = $titrepage['id'];
   $id_de_la_page.="$id";

   $titre_de_la_page = $titrepage['titre_de_la_page'];
   $titre_de_page.="$titre_de_la_page";
   $lien=html_entity_decode($titre_de_la_page);


      echo '<a href="'.reecritureUrl($lien).'-'.$id.'.php">Version reecrite</a>';

 }

mysql_close();


?>
Je ne vois pas ce qui cloche ?
 
WRInaute occasionnel
la fonction qui prend en charge l'intégralité des caractères ASCII et les convertis en un texte sans accent, en supprimant les mots d'une taille inférieure à $TAILLE_MINI, les mots d'une taille supérieure à $TAILLE_MAXI, en tronquant le texte à $NOMBRE_MOTS mots et en prenant pour séparateur $SEPARATEUR.

PS: même le signe € est transformé en euro :p

Voici le code :

PHP:
<span class="syntaxdefault">function texte_pour_url</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    $TAILLE_MINI</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $TAILLE_MAXI</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">26</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $NOMBRE_MOTS</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">15</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $SEPARATEUR</span><span class="syntaxkeyword">=</span><span class="syntaxstring">'-'</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    $c</span><span class="syntaxkeyword">=</span><span class="syntaxstring">'AAAAAAAAAEEAAEAAAAAAAAAAAAAAAAAAEEEEEEEEEEEEEEEE0123456789EEEEEEEabcdefghijklmnopqrstuvwxyzEEEEEEabcdefghijklmnopqrstuvwxyzEEEEEBEEEEEEEEEsECEEEEEEEEEEEEEsECEzyEiEEEEEEEEEEEEEEEE23EEEEEEEEEEEEaaaaaaDceeeeiiiidnoooooxouuuuypEaaaaaaDceeeeiiiionoooooEouuuuyEyE'</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">$d</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">for </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> $i </span><span class="syntaxkeyword"><</span><span class="syntaxdefault"> $d</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> $i</span><span class="syntaxkeyword">++)</span><span class="syntaxdefault"> $e</span><span class="syntaxkeyword">.=</span><span class="syntaxdefault">$c</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">ord</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$a</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">])];</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">str_replace</span><span class="syntaxkeyword">(array(</span><span class="syntaxstring">'A'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'B'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'C'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'D'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'E'</span><span class="syntaxkeyword">),array(</span><span class="syntaxstring">''</span><span class="syntaxkeyword">,</span><span class="syntaxstring">' euro '</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'oe'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">'ae'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">' '</span><span class="syntaxkeyword">),</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">preg_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'#\s+#'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">' '</span><span class="syntaxkeyword">,</span><span class="syntaxstring">" $e "</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">preg_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'#\s[a-z]{1,'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$TAILLE_MINI</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'}\s([a-z]{1,'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$TAILLE_MINI</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'}\s)*#'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">' '</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">preg_replace</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'#\s[a-z0-9]{'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$TAILLE_MAXI</span><span class="syntaxkeyword">.</span><span class="syntaxstring">',}\s([a-z0-9]{'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$TAILLE_MAXI</span><span class="syntaxkeyword">.</span><span class="syntaxstring">',}\s)*#'</span><span class="syntaxkeyword">,</span><span class="syntaxstring">' '</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">str_word_count</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'0123456789'</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">return implode</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$SEPARATEUR</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">array_slice</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$e</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$NOMBRE_MOTS</span><span class="syntaxkeyword">));}</span><span class="syntaxdefault">  </span>

Exemple

PHP:
<span class="syntaxdefault">echo texte_pour_url</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'La conversion est lancée dès que vous nous soumettez l’adresse de la vidéo, ensuite il vous suffira de télécharger le mp3 que nous aurons créé. A la différence d’autres services, l’intégralité du processus de conversion est effectué au sein de notre infrastructure, vous n’avez qu’à télécharger le fichier audio alors stocké sur nos serveurs.'</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxcomment">//retourne : conversion-est-lancee-des-que-vous-nous-soumettez-adresse-video-ensuite-vous-suffira-telecharger-mp3      &nbsp;</span><span class="syntaxdefault"></span>
 
Discussions similaires
Haut