Reformater 1 url:remplacer caractères spéciaux et espaces

WRInaute passionné
Bonjour,

Je suis en train de développer un petit script d'affichage de rêves pour un (re)nouveau site (-www.boiteareves.com - encore en plein (re)développement).

J'affiche les rêves sous forme de liste (10 rêves par page).
Chaque titre de rêve est cliquable : le rêve est affiché individuellement sur une page avec ses commentaires associés (actuellement les commentaires ne sont pas encore implémentés).
Dans l'url qui permet d'accèder à cette page individuelle je veux passer le titre du rêve, titre qui contient souvent des espaces et des caractères spéciaux (ç, é, è,...).

Il me semble donc judicieux de reformater ces titres afin de les rendre plus search-friendly :wink:.
Je pensais utiliser un petit script php et me demandais quelle fonction permettait de faire ça le plus efficacement possible :- ?
 
WRInaute accro
ah, c'est toi qui a récupéré le domaine boiteareves ;)

Code:
$in = (' ', 'é', 'è', 'à');
$out = array('-', 'e', 'e', 'a');
$url = str_replace($in, $out, $url);
comme ca ? ;)
 
WRInaute passionné
Pfv3 a dit:
En passant, actuellement je n'arrive pas à voir les accent sur ton site. Il y a plein de "?".

Ah ? Sur toutes les pages ? Le code source est pourtant très basique, je ne vois pas d'où ça peut venir :?.

J'ai essayé ça mais ça me fait une "parse error" à la ligne "$in..." :

Code:
$url = "http://www.boiteareves.com/reve.php?id=429&titre=Copine philosophique&reves_bckid=0&nb_reves_aff=10";
$in = (' ', 'é', 'è', 'à');
$out = array('-', 'e', 'e', 'a');
$url = str_replace($in, $out, $url);
 
WRInaute passionné
Héhé, ui ça marche mieux comme ça :) !

J'ai fait un petit mix entre ta méthode et celle donnée dans le topic cité par Fab le fou :

Code:
    $accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
	$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
	$titre_url = strtr($titre,$accents,$ssaccents);
	$in = array(' ', '?', '!', '.', ',', ':', "'", '&', '(', ')');
	$out = array('-', '', '', '', '', '', '-', 'et', '', '');
	$titre_url = str_replace($in, $out, $titre_url);

Ca marche pas mal du tout. Mais j'ai encore un petit soucis. Un exemple fera vite comprendre je pense :
titre : Mais qu'est-ce qu'il m'arrive ?
titre_url : Mais-qu-est-ce-qu-il-m-arrive-

J'en veux pas moua de ce tiret à la fin :x. Il se met là parce que c'est un espace vide, mais le point d'interrogation étant supprimé le tiret se retrouve à la fin comme un idiot.

Une tite astuce en stock :wink: ?
 
WRInaute accro
Code:
if ($titre_url[count($titre_url)-1] == '-') {
$titre_url[count($titre_url)-1] = ''; }
en gros, si le dernier caractere est un -, tu le mets à vide.
 
WRInaute passionné
Mmm il garde le tiret là :s.
Code:
    $accents = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
	$ssaccents = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";
	$titre_url = strtr($titre,$accents,$ssaccents);
	$in = array(' ', '?', '!', '.', ',', ':', "'", '&', '(', ')');
	$out = array('-', '', '', '', '', '', '-', 'et', '', '');
	$titre_url = str_replace($in, $out, $titre_url);
	if ($titre_url[count($titre_url)-1] == '-')
	{
	$titre_url[count($titre_url)-1] = '';
	}
 
WRInaute passionné
En fait il n'a pas l'air de détecter le tiret à la fin et ne peut donc pas l'enlever.

Quand je fais :

Code:
if ($titre_url[count($titre_url)-1] == '-')
	{
	echo "Test : tiret à la fin du titre";
	}

Rien de s'affiche pour un titre qui contient pourtant un tiret à la fin.[/code]

Edit : c'est bon j'ai trouvé comment faire mon pouich :).
 
WRInaute discret
yazerty a dit:
Edit : c'est bon j'ai trouvé comment faire mon pouich :).

Salut !

Peut-on savoir comment ?

J'ai testé mais j'ai aussi un problème avec l'apostrophe... Le remplacement ne fonctionne pas !... si quelqu'un a une idée...
 
Nouveau WRInaute
Tombé dessus via google, je fais un up.
Une solution simple et intéressante :

http://www.denisdeejay.com/remplacer-les-caracteres-speciaux-en-php-59.html

Qui en aidera plus d'un !
 
Discussions similaires
Haut