"&" ou "&" dans une URL ?

"&" ou "&" dans une URL ? - PHP - Programmation

Marsh Posté le 24-01-2006 à 17:17:29    

Bonjour,
 
Dans mes "href", j'écris :
 
"../dossier/nom_page.php?var1=aa&var2=bb"
 
cela marche sans problème sous IE et sous Firefox.
 
Quand je mets
 
"../dossier/nom_page.php?var1=aa&var2=bb"
 
cela marche sans problème sous IE mais plus sous Firefox.
 
Il me semblait que la norme W3C demandait "&" plutôt que "&".
 
Dans PHP.INI, j'ai
- "arg_separator.input" = "&"
- "arg_separator.output" = "&"
Je n'ai pas accès à PHP.INI facilement.
 
En furetant, j'ai trouvé que l'on pouvait les modifier par .htaccess mais je n'ai pas trouvé la formule magique = je n'ai pas très bien compris (pas du tout d'ailleurs) comment utiliser PHP_INI_PERDIR ou PHP_INI_ALL.
 
Mes questions :
1) - Vaut-il mieux "&" ou "&" ?
2) - Comment puis-je modifier mes arg_separator sans modifier PHP.INI ?
3) - Quelle est la différence entre les deux ?
4) - Comment marche PHP_INI_PERDIR ?
 
Merci, merci.
 
 

Reply

Marsh Posté le 24-01-2006 à 17:17:29   

Reply

Marsh Posté le 24-01-2006 à 19:24:09    

& marche partout depuis plusieurs années. Si le W3c veux changer, il le feront mais ca prendra du temp donc on y est pas.
Mon conseil : utilise & :d

Reply

Marsh Posté le 24-01-2006 à 23:05:36    

:??:
 
J'utilise toujours & et j'utilise Firefox depuis des années, ça marche très bien.
 
De toute façon & est une entité qui existe depuis toujours, et je doute que FF puisse ne pas être compatible


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 24-01-2006 à 23:20:43    

h4rold a écrit :

& marche partout depuis plusieurs années. Si le W3c veux changer, il le feront mais ca prendra du temp donc on y est pas.
Mon conseil : utilise & :d

Au contraire on y est déjà à fond au moins depuis la premiére mouture de ce qui est devenu la norme XHTML1.0 . Le W3C a changer d'avis là dessus depuis au moins cette époque là.
En xhtml, le caractére "&" définis un début d'entité constitué de l'ensemble des caractéres jusqu'au ";" suivant. Le & n'est pas un caractére comme les autres, c'est un caractére spécial qui a une signification propre au même titre que les caractéres < et >. (début et fin de balise)
Certe il a fallut attendre le xhtml pour voir apparaitre le "&amp;" directement dans les adresses mais l'entité "&amp;" existe depuis bien plus de 10 ans.
 
 
Ce qui faut retenir : en html, la norme dit que le caractére "&" est utilisable seul dans les adresses. Avec les navigateurs récents, le "&amp;" marche tout aussi bien.
En xhtml, le caractére "&" tout seul est interdit où qu'il soit même dans les adresses. La seule exception à cette régle est du aux régles du xml : dans une zone "CDATA", tous les caractéres sont des caractéres normaux, il faut donc y mettre un "&" simple et non pas un "&amp;". Jusqu'a présent, je n'ai pas vu la moindre source de page xhtml contenant des zones "CDATA".
 
Le seul cas que je conais où le &amp; posait probléme dans une adresse, ca a été pour un header "refresh" et une balise "refresh" mais ce n'était pas du au &amp;, c'était du à un non respect des régles d'écriture de ces éléments là.

Reply

Marsh Posté le 21-02-2006 à 16:13:41    

Bon, je n'ai pas résolu mon problème.
Par contre, j'ai remarqué que les URL d'autres sites ne contiennent pas
" & a m p ; " mais " & " tout seul.
 
Sur ce site même je ne vois que des & simples.
Dans l'annonce Google les variables sont séparées par des & simples.
Est-ce qu'il y a une indication à donner dans le code que j'oublie ?
Peut-être dans les metas, les content ?
 
Merci.

Reply

Marsh Posté le 21-02-2006 à 19:40:23    


1- W3C indique que utiliser & peut introduire des ambiguïtés dans les noms de variables. Par ex:
variable: separateur
valeure: ;
donne &separateur=;
est ambigü. La plupart du temps ces ambiguïtées sont levées par le navigateur qui ne trouve pas l entité dans ses tables.
 
2- une tartine tombe toujours du côté beurré, j utilise donc toujours htmlentities().
 
 

Reply

Marsh Posté le 22-02-2006 à 12:10:11    

nargy > Si c'est pour mettre des valeurs dans les url, il vaut mieux utiliser "urlencode()" que "htmlentities()". La premiére est faite justement pour noter des adresses alors que la seconde est faite pour afficher du texte dans un navigateurs en étant sur que les caractéres spéciaux s'afficheront bien et que le navigateur ne traite pas une partie de cette chaine comme étant une balise html standard.

Reply

Marsh Posté le 22-02-2006 à 15:51:46    

omega2> théoriquement il faut les deux.
- pour les variables, les valeures, les répertoire, les noms de fichiers (...) il faut utiliser urlencode()
- pour mettre l url dans un href il faut htmlentities()
exemple:

Code :
  1. htmlentities(
  2. 'http://mon.site/'
  3.   .urlencode($repertoire.'/'.$fichier)
  4.   .'?'.urlencode($variable1).'='.urlencode(valeur1)
  5.   .'&'.urlencode($variable1).'='.urlencode(valeur1)
  6.   .'#'.urlencode($ancre)
  7. )


 

Reply

Marsh Posté le 22-02-2006 à 16:15:42    

C'est bien ce que je disais. PAr contre, dans ton message précédant, tu laissais entendre que t'utilisais htmlentites également pour les URL ce qui aurait été une erreur.

Reply

Marsh Posté le 22-02-2006 à 17:09:03    

Je me suis rendue compte que mes url étaient appelées par deux types de fonctions :
Des fonctions utilisant du JS et des autres non.
Ce sont celles qui utilisent le JS qui m'analysent mal les &  a m p;
J'en suis à chercher sur window.location (par exemple) et firefox.
J'ai mis des messages dans la partie Javascript.


Message édité par krylon31 le 27-02-2006 à 08:18:13
Reply

Marsh Posté le 22-02-2006 à 17:09:03   

Reply

Marsh Posté le 24-02-2006 à 23:18:00    

ini_set("url_rewriter.tags","" ); // pour la validation XHTML
 
en début de tes pages et tes & seront convertit et tes liens valides XHTML.

Reply

Marsh Posté le 27-02-2006 à 09:08:12    

Résultat du WE.
Je relis le code mis par nargy :
.......................
htmlentities('http://mon.site/'  .urlencode($repertoire.'/'.$fichier)  .'?'.urlencode($variable1).'='.urlencode(valeur1)  .'&'.urlencode($variable1).'='.urlencode(valeur1)  .'#'.urlencode($ancre))
.......................
 
Je me rends compte qu'il met des "&" là où je mets des "&amp;" :
......................
htmlentities('http://mon.site/'  .urlencode($repertoire.'/'.$fichier)  .'?'.urlencode($variable1).'='.urlencode(valeur1)  .'&amp;'.urlencode($variable1).'='.urlencode(valeur1)  .'#'.urlencode($ancre))  
.......................
 
Sur Nexen, je retrouve la même chose :
........................
//$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
//echo '<a href="moncgi?' . htmlentities($query_string) . '">';
........................
 
Finalement, est-ce que je ne m'acharne pas à vouloir mettre des "&amp;" au mauvais endroit ?
Je relis mes messages et je me rends compte que je n'ai pas bien précisé où mes "&amp;" ne passent pas.
 
 
 
 
Si j'écris :
........................
$link="creannot.php?".utf8_encode("zaza=l&amp;ulu&id=$id" );
........................
 
je n'ai effectivement aucun problème alors qu'avec  
........................
$link="creannot.php?".utf8_encode("zaza=l&amp;ulu&amp;id=$id" );
........................
Rien ne va plus !!!
 


Message édité par krylon31 le 27-02-2006 à 09:14:07
Reply

Marsh Posté le 27-02-2006 à 17:49:29    

Mais si on te donne des réponses, il faut que ca serve à qqch sinon on perd pas notre temps.
 
As tu essayé ?
 
ini_set("url_rewriter.tags","" ); // pour la validation XHTML  
 
C'est ce que j'utilise sur tous mes scripts et tous sont compatibles CSS 2.0 et XHTML 1.0 strict

Reply

Marsh Posté le 27-02-2006 à 18:49:08    

newneo2001 > oui j'ai bien ini_set("url_rewriter.tags","" );


Message édité par krylon31 le 27-02-2006 à 18:51:31
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed