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.