Problème %20 lié aux espaces

WRInaute occasionnel
Salut à tous !

Bon voila je sait que le sujet à déjà été abordé, mé je n'é rien trouV pour résoudre mon pb : j'aimerai supprimer les %20 qui s'affiche à la place des espaces.

Ex : http://www.bradeux.com/137-L'Exorciste en dvd.html

J'ai créé une régle comme ceci :

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([0-9]+)-(.*)\.html$ /product_desc.php?id=$1 [L]

Par la même occasion, si vous pouviez me dire le caractère remplacant le %20 le mieux capter par les robots de google !!! ca serait cool !

Merci d'avance à tous :lol:
 
WRInaute discret
Salut,

Je ne sais pas si ça va t'aider, mais essaie d'utiliser la fonction urlencode($variable) de PHP. Lorsque tu récupèreras tes variables avec $_GET["variable"], la fonction urldecode($variable) sera automatiquement appliquée, de ce fait, tu n'auras plus les vilains espaces dans ton URL, mais de jolis "+" :).

Voilà, en espérant t'aider.

A+

Doug
 
WRInaute occasionnel
en fait ça n'é pas un url direct, il s'agit d'un nom quelconque chopé dans une table c'est pour ça qu'il y a des espaces, mais pas seulement, y'a aussi des :, " ....

Concernant urlencode, est ce que tu pourrais m'en dire plus, je débute en php. Voici mon lien actuel :

<a href="<? echo $rs0["id"]?>-<? echo $rs0["product_name"];?>.html"><? echo $rs0["product_name"];?></a>

Merci :lol:
 
WRInaute discret
Oui pouzy c'est sûr, c'est de loin le mieux. Seulement, parfois il est peut-être plus simple de feinter rapidement (de la bidouille quoi) plutôt que de faire quelquechose d'archi propre, mais bon, cela n'engage que le webmaster bien sûr :). J'avoue que je suis plutôt un adepte de la bidouille en fait :-D.

Doug
 
WRInaute discret
Pour "urlencoder" ce lien, j'opte pour cette méthode :

<?
$id = $rs0["id"];
$product_name = $rs0["product_name"];
?>

<a href="<?=urlencode($id)?>-<?=urlencode($product_name)?>.html"><?=$product_name?></a>

Et lorsque sur la page suivante tu récupères tes variables :

<?
$id = $_GET["id"];
$product_name = $_GET["product_name"];
?>

qui sont automatiquement "urldecodées".

Si tu as d'autres soucis, n'hésite pas.

Doug
 
WRInaute occasionnel
Ok, doug ca marche a merveille ! merci

je vais juste pousser un peu plus loin mon apparentissage ! est il possible de remplacer les + par un - et de configurer les : car pour le moment j'obtiens %3A à la place des : ?

Merci
 
WRInaute occasionnel
est ce qu'on peu faire aussi quelque chose pour les accents ? j'obtiens %E9 à la place de é ?
 
WRInaute discret
Le remplacement des + par des - dans tes variables est possible mais via une autre "bidouille" : les expressions régulières.

En fait, si tu veux changer les espaces par des "-" direct, il faut faire comme suit :

<?
$pattern = "| |";
$replacement = "-";

$variable = preg_replace ($pattern, $replacement, $variable);
$variable2 = preg_replace ($pattern, $replacement, $variable2);
?>

puis inversement dans la page suivante pour remettre les espaces à la place des "-" :

<?
$pattern = "|-|";
$replacement = " ";

$variable = preg_replace ($pattern, $replacement, $variable);
$variable2 = preg_replace ($pattern, $replacement, $variable2);
?>

En fait dans la ligne :

$pattern = "|*|";

Tu mets ce que tu veux à la place de l'étoile, c'est ce que tu veux remplacer, et dans la ligne :

$replacement = "*";

tu mets ce que tu veux à la place de l'étoile et c'est ce par quoi tu vas remplacer.

Pour plus de détails et de meilleures explications que les miennes :) : -http://www.php.net/manual/fr/ref.pcre.php
 
WRInaute occasionnel
merci doug, tout marche.

Dernière précision, si je vais mettre plusieurs variables dans le pattern genre espace + è + é + à ... comment puis je faire ?

J'ai esseyé :
<?
$pattern = "| ,é,à,è|";
$replacement = "-";
$variable = preg_replace ($pattern, $replacement, $variable);
?>

Mé bon ... ca marche pas ... ta une idée ??

encore merci
 
WRInaute impliqué
Salut,

Tu peux aussi essayer un truc dans le genre à adapter biensûr...

Code:
$variable=str_replace(" ","+",$variable);
$variable=str_replace("é","e",$variable);
$variable=str_replace("è","e",$variable);

et ainsi de suite .... toute fois on doit pouvoir faire mieux mais pour quelques régles ca devrait le faire
 
WRInaute discret
Salut,

Oui bradeux, c'est normal que ça ne fonctionne pas, tu ne peux pas remplacer plusieurs expressions comme cela.

Je te ferai un petit bout de code ce midi pendant ma pause pour te montrer comment l'on fait.

A+

Doug
 
WRInaute discret
Code:
<html>
<head>
</head>
<body>
<?
$chaine = "téà _";

$tochange = array ("|é|" => "e", "|à|" => "a", "| |" => "", "|_|" => "-");

foreach ($tochange as $key => $value) {
	$chaine = preg_replace ($key, $value, $chaine);
}

echo $chaine;
?>
</body>
</html>

Voilà, en gros dans le $tochange tu mets ta série de "|a_remplacer|" => "remplacement", séparée par des virgules et la boucle foreach fait le reste du boulot.

A+

Doug

PS : Désolé, un peu de retard, mais resto ce midi ;)
 
Discussions similaires
Haut