8797 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai developpe (en php) un site qui gere une base de donnees (de seminaires) et j'ai voulu la valider W3C.
Or je me heurte a un probleme serieux : j'ai des formulaires qui utilisent la methode GET, et je transmets des infos d'une page a l'autre par cette methode; mais W3C couine parce qu'il ne veut pas d'ampersands dans les uri; il me demande de mettre le codage & a la place.
Naivement je l'ai fait, mais bien sur ca ne marche plus car le tableau $_GET ne sait plus recuperer ces valeurs.

C'est tout de meme etrange que la methode GET soit incompatible avec le standard... Sur le site W3C j'ai vu que les serveurs etaient pries d'accepter le ";" en lieu et place de l'ampersand. Bien joli mais mon serveur ne l'accepte pas!

Y a-t-il une facon de contourner ce probleme (par exemple, de dire a php quel separateur il doit attendre entre les variables GET?), sachant que je tiens a utiliser GET - j'utilise aussi POST et les var de sessions mais c'est vraiment GET qu'il me fait pour certains trucs.

Merci d'avance pour tout eclairage de ma lanterne...
Bien a vous

Nardoel
Modifié le 09 Feb 2005 - 23:08
Oui, en effet c'est tres voisin; mais en fait ca ne repond pas a mes angoisses. Moi j'aurais besoin de changer arg_separator.input afin que php accepte ";" comme separateur. Malheuresement ca ne semble pas faisable depuis le script; il faut apparemment changer le php.ini ou pire; et ca j'y ai pas acces.
J'eusse espere qu'une solution plus legere permettrait d'utiliser la bonne vieille methode GET sans offusquer W3C...
Dois-je donc me resigner a ne pas etre W3C-valide?

Merci en tout cas de cette reponse.

Nardoel
ini_set('arg_separator.output', '&');

Avec ça en début de script, plus de problème pour les sessions.

Pour les URL de tes pages, remplace tous les & par des &.
Modifié le 09 Feb 2005 - 13:26
Merci a e t172

Mais en fait ca ne repond pas a mon souci; peut-etre n'ai-je pas ete tres clair. J'ai surtout besoin que php interprete & ou ; comme separateur dans les url... et ca je sais pas faire sans modifier la config.

Toutefois j'ai reussi a m'en sortir au prix d'un bricolage sordide; voici ce que j'ai fait : j'ai remplace tous les $var=$_GET['var'] que j'avais par des
$var=get('var'), get('var') etant une fonction qui retourne $_GET['var'], ou a defaut (si ce dernier est NULL), $_GET['amp;'.'var']. Cela mime l'effet que je recherchais. Par ailleurs j'ai defini deux fonctions, l'une qui remplace les & par des & dans une url, l'autre qui fait l'inverse. Et avec tout ca ca marche, au prix de pas mal de modifs et je trouve un peu dommage d'en etre reduit a faire des choses aussi moches pour me conformer au Standard...

Donc si quelqu'un a une meilleure idee je suis toujours preneur!
Modifié le 09 Feb 2005 - 18:06
Etrange tout cela tout de même...

Pour le séparateur, on ne peut pas interpréter '&' On ne peut interpréter qu'un seul caractère. Dans le php.ini, c'est écrit, pour arg_separator.input :
a écrit :
Every character in this directive is considered as separator!

Aussi, lors de l'envoi du formulaire, les & sont transformés en '&', donc le script PHP qui parse le $_GET ne voit que des '&'. Donc c'est comme si ton navigateur ne transformait pas les & en & Smiley confus
Modifié le 09 Feb 2005 - 18:44
Pourquoi tu veux & comme séparateur dans PHP ?

<a href="index.php?truc=chose&amp;bidule=machin">

> Le navigateur convertira l'URL en index.php?truc=chose&bidule=machin !
Modifié le 09 Feb 2005 - 18:56
A Florent G :
Oui pour le simple caractere; c'est bien pour ca que W3C preconise d'utiliser ; comme separateur - et moi, j'aimerais bien que mon php accepte ; et &, mais y veut pas le bougre! Comme je ne peux rien y changer.... je me dem...brouille autrement et je remplace les $_GET['var'] par des get('var'), et tout se passe comme si & et &amp; etaient tous deux reconnus comme des separateurs... Par contre ce que tu dis sur le butineur m'etonne un peu, j'ai firefox, je ne pense pas qu'il fasse des bizarreries... j'avais pourtant bel et bien un probleme avant la bidouille; je vais verifier tout de meme.

A e t 171 : ben non ca marche pas parce que le butineur, il sait gerer les &amp; mais mon php lui ne sait pas reconnaitre dans &amp; un separateur (justement parce qu'il accepte que des caracteres simples dans ce role).
Comme mes pages doivent aussi pouvoir recevoir et echanger des donnees par GET je suis coince. D'ou ma solution : ma fonction get('var') permet justement de traiter a la fois & et &amp; comme si c'etaient des separateurs...
Puisque ca semble obscur voici le code de cette fonction mirifique, ce sera plus clair je pense :

function get($var) {
$x=$_GET[$var];
if ($x==NULL):
$x=$_GET["amp;".$var];
endif;
return $x;
}

donc si j'ai ...&var=pajojo&..., ou si j'ai ...&amp;var=pajojo&..., je recupere dans les deux cas $var=pajojo

C'est pas jojo, mais ca marche.
Modifié le 09 Feb 2005 - 19:12
Oui, mea culpa, vous aviez tous raison!

Je n'avais pas compris que le navigateur transforme automatiquement les &amp; en &.

Du coup en effet il suffit de dire a php d'emettre &amp; en guise de separateur, ce qui est possible depuis le script, et de veiller a ce que tous les url generes par mes scipts comportent des &amp; pour la validation W3C.

J'ai mis du temps a comprendre, mais 'la piece est tombee'.

Desole pour ma lenteur et encore merci pour votre aide!

Nard'