Se visualizzate una pagina (X)HTML siffatta (copiate e incollate):
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Untitled</title> </head> <body> &lang=1 <br /> ⟨=1 <br /> ⟩=1 </body> </html>
in questo modo
&lang=1 〈=1 〉=1
sappiate che le due entities HTML &lang
(sì, così, senza punto e virgola) e &rang
sarebbero left e right angle brackets, che non sono i simboli di minore o maggiore, ma parentesi angolari.
Alcuni di voi diranno “ecco…!” altri diranno “e ddovestascritto?!”.
Ai primi dico “Eh, ‘nfatti…” ai secondi, dico “qui“.
Allora, il problema e’ questo:
Mettiamo che tu abbia come parametro in un URL la lingua e che tu abbia deciso di usare come switch “lang
“.
Dovendolo passare in un URL scriverai:
http://www.roam.it/index.aaa?lang=1
Ma se non lo passi come primo parametro, avrai:
http://www.roam.it/index.aaa?edue=0&lang=1
Quando metti la URL in un href
, ovviamente passerai i parametri URLencoded, e quindi scriverai (spero):
http://www.roam.it/index.aaa?edue=0&lang=1
A questo punto tu lo VEDI come
http://www.roam.it/index.aaa?edue=0&lang=1
ma se lo clicchi nell’header http ci va correttamente quello URLencoded.
Tuttavia se vai a vedere i log scoprirai che non sempre i log mantengono il formato URLencoded; mettiamo che tu usi AWSTATS per pettinare i log e renderli disponibili a terzi.
Quando costoro visualizzano quegli URL. li vedranno come
http://www.roam.it/index.aaa?edue=0〈=1
Perché il browser interpreta &lang
come parentesi angolare aperta.
Non solo, ma se ci cliccano sopra, prendono un bel 404
, perché
http://www.roam.it/index.aaa?edue=0〈=1
in effetti non esiste.
E quindi ti rompono i coglioni.
Morale: non passare la lingua URLencoded come &lang=qualcosa
se vuoi dei log puliti.
Oppure passarla come primo parametro: ?lang=qualcosa
.