Nettoyer variable pour URL

Eléphant du PHP | 160 Messages

09 sept. 2006, 15:51

Bonjour,

Afin de donner un titre unique (balise TITLE) à mes pages présentant des événements, je récupère le nom de l'événement, le transfère par l'URL, et l'utilise pour ma balise title. Ce nom d'événement comporte des caractères qui ne conviennent pas pour un lien.
J'aimerais savoir comment nettoyer le nom pour l'URL et le garder tel quel pour la balise TITLE.

Si quelqu'un peut me donner des pistes,

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 sept. 2006, 15:56

Salut,
Jette un oeil à urlencode()

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 160 Messages

09 sept. 2006, 17:56

Merci pour l'information.
J'ai essayé de faire ça :
 <a href="activite.php?id=<?=$Record->id?>&titre=<? echo $titre = urlencode ($Record->nom); ?>">Voir les images</a>
J'ai bien la variable dans mon title mais j'ai des problèmes avec le "à"
exemple avec : via feratta à peille
activite.php?id=35&titre=Via+ferrata+%E0+Peille
comme lien.

Si vous pouvez m'aider à trouver le pb,

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 sept. 2006, 20:21

urldecode() peut être.... lire la doc :)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 160 Messages

09 sept. 2006, 23:52

J'avais essayé de voir ça mais là je bloque.
J'encode l'url pour nettoyer l'adresse en voulant la rendre lisible.
<a href="activite.php?id=<?=$Record->id?>&titre=<? echo $titre = urlencode ($Record->nom); ?>">Voir les images</a>
Là, mon URL contient des + qui remplacent des espaces et des %E0 qui remplacent des à. Est-ce normal de voir %E0 et est-ce lisible pour les moteurs?
Et pour la récupérer dans le titre de mon autre page je fais juste :
<? echo $titre; ?>
Et j'ai bien la bonne expression, sans les plus et %E0 alors que je n'ai pourtant pas mis urldecode ().
Si quelqu'un peut m'expliquer un peu parce que je ne comprends pas grand chose à ce qui se passe.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 sept. 2006, 10:24

L'encodage de l'url permet de remplacer les caractères spéciaux par leur valeur héxadécimale précédées d'un % pour pouvoir être transmis via l'url. Les espaces sont remplacés par des plus (+), les retours à la ligne (\r\n) par des %0A%0D, etc.

Ce codage est celui utilisé pour poster des informations dans les formulaires. Si tu envoi un textarea contenant quelques lignes et caractères spéciaux en GET, tu verras la transformation automatique de ceux-ci dans ta barre d'adresse :)

Il n'est donc pas nécessaire d'utiliser de fonction decode quand tu récupères ces valeurs en GET puisque le fonctionnement est le même que pour un champ de formulaire, voici pourquoi tu peux l'utiliser directement.

Quant aux moteurs de recherche, ils n'apprécient que moyennement les paramètres et en tolèrent rarement plus de 3, mais ne poseront normalement pas de problème sur ces caractères encodés :)

Eléphant du PHP | 160 Messages

11 sept. 2006, 10:04

Merci pour les explications, mais qu'entends tu par paramètres :
Quant aux moteurs de recherche, ils n'apprécient que moyennement les paramètres et en tolèrent rarement plus de 3
Merci encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 sept. 2006, 11:32

Ben par paramètre j'entends les données dynamiques passées dans l'url pour accéder à la page demandée :)

http://.../ma_page.php -> sera bien indexée
http://.../un_mot_cle.php -> sera mieux indexée
http://.../ma_page.php?id=5&lang=fr -> sera indexée de manière correcte (puisque moins de 3 paramètres pour accéder à la page)
http://.../ma_page.php?id=5&lang=fr&region=idf&meteo=pluvieux&recette=repas+pour+trois+personnes&... -> ne sera pas ou mal indexée

Eléphant du PHP | 160 Messages

11 sept. 2006, 11:39

J'ai compris, merci pour cette information qui m'interesse tout particulièrement en ce moment :D Je m'en vais optimiser quelques pages de ce pas :oops:
Encore merci et à bientôt