JeuWeb - Crée ton jeu par navigateur
Comment gérez-vous les & dans les url - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Comment gérez-vous les & dans les url (/showthread.php?tid=6080)

Pages : 1 2


RE: Comment gérez-vous les & dans les url - Sephi-Chan - 16-04-2012

L'encodage des entités HTML n'est utile que quand ton URL est affichée dans un document XML.
Tu n'en a pas besoin dans la définition de ton header.

Il y a effectivement d'autres séparateurs possibles (ça se configure aussi du côté du serveur Web, il me semble), mais ce cher & fait très bien l'affaire.

Enfin, on ne sait pas ce que fait ta moulinette puisque tu ne donne pas le code de la méthode qu'elle utilise.
Je suppose qu'il existe des composant te fournissant ce genre d'utilitaires. Tu pourrais t'en inspirer.


RE: Comment gérez-vous les & dans les url - niahoo - 16-04-2012

c'est une fonction native, ça encode tout bien comme il faut. D'après la doc on peut préciser '&' au lieu de '&', (enfin, tu donnes la chaine que tu veux au final)

http_build_query


si php avait un gestionnaire d'erreurs par exceptions tu pourrais coder ta fonction comme ça

<?php

function html_url($path, array $params=array())
{
$url = $path;
if(!empty($params))
return $url . '?' . http_build_query($params, '', '&');
return $url;
}


echo html_url('monurl.php', array('id' => 'mon_id' , 'param' => '1&2&3'));

C'est quand même plus clair.


RE: Comment gérez-vous les & dans les url - Sephi-Chan - 16-04-2012

Oups pardon ! Effectivement, c'est une fonction native !
Ça ne m'était pas venu à l'esprit au regard du nom explicite. :p


RE: Comment gérez-vous les & dans les url - niahoo - 16-04-2012

Avant elle s'appellait params_crunch_amperstand alors je ne te jette pas la pierre.


RE: Comment gérez-vous les & dans les url - php_addict - 16-04-2012

(16-04-2012, 10:35 AM)niahoo a écrit : si php avait un gestionnaire d'erreurs par exceptions tu pourrais coder ta fonction comme ça

pourquoi "si php avait un gestionnaire d'erreurs par exceptions" ?


RE: Comment gérez-vous les & dans les url - niahoo - 16-04-2012

Ben j'ai remplacé ton is_array() par le terme array dans la déclaration des paramètres de la fonction, c'est plus clair.

Seulement si tu passes une string par exemple, au lieu de pouvoir récupérer l'exception tu te mages une fatal error. (en fait, j'ai menti, tu peux récupérer cette erreur avec set_error_handler et balancer toi-même l'exception)



RE: Comment gérez-vous les & dans les url - Viciousity - 17-04-2012

Mais pourquoi ne pas essayer de passer par un système de routing ... ?

Cela te permettrai d'obtenir des urls beaucoup plus propres du genre de monurl/param/123


RE: Comment gérez-vous les & dans les url - php_addict - 17-04-2012

(17-04-2012, 11:37 AM)Viciousity a écrit : Mais pourquoi ne pas essayer de passer par un système de routing ... ?

je ne suis pas certain de comprendre, qu'entends tu par routing? est ce qe l'url rewrittng ?



RE: Comment gérez-vous les & dans les url - Sephi-Chan - 17-04-2012

L'URL rewriting, c'est le routeur du pauvre. Mais l'idée y est.

Le routeur, c'est un composant qui permet d'associer une route à quelque chose : généralement l'action d'un contrôleur.

Voici un exemple de table de routage d'une application Rails.

Ça permet d'avoir des routes propres et générées (ce qui permet de les changer/traduire/autre sans avoir à modifier le code).

Prenons une ligne de cette table :

Citation :user_gallery GET /users/:user_id/galleries/:id(.:format) galleries#show

Quand le visiteur arrive dans l'application par un chemin de cette forme, c'est l'action show du contrôleur galleries qui est appelée. Ce qu'il y a la place des placeholder est transmis sous forme de paramètre GET : si je vais sur /users/42/galleries/24?foo=bar, dans mon action de contrôleur, j'aurais à ma disposition un hash nommé params qui aura la forme (j'ai mis un paramètre GET classique juste pour l'exemple) :


{ user_id: 42, id: 24, foo: 'bar' }

Ensuite, pour générer un lien vers une gallerie, je pourrais faire quelque chose comme :


@user = User.find(42)
@gallery = @user.galleries.find(24)

link_to user_gallery_url(@user, @gallery, foo: 'bar') # => http://.../users/42/galleries/24?foo=bar
link_to user_gallery_url(@user, @gallery, foo: 'bar', format: :json) # => http://.../users/42/galleries/24.json?foo=bar.

L'avantage, c'est que ça gère même le format de la requête. Si je veux un autre format que du HTML classique (du JSON pour une requête AJAX, une image pour un avatar, etc.), je peux ajouter spécifier un format de retour sera capable de savoir ce que je souhaite en sortie et faire des choses différentes selon les cas.

Note que la méthode link_to appelle la méthode to_param sur les objets qu'on lui donne (ici @user et @gallery) pour savoir quoi mettre à la place du placeholder. Ça permet de faire des URL propres, genre : http://.../users/42-php-addict/galleries/24.