Le caractère "&" n'est pas un caractère SGML reconnu. Il doit être remplaçé par l'entité HTML "&".
L'erreur est fréquente dans les liens des URL.
En général, lorsque vous utilisez des sessions PHP, ce caractère "&" se crée automatiquement pour indiquer l'id de session et vous ne pouvez pas le modifier à la main.
Dans ce cas, vous devez indiquer cette modification via une instruction PHP :
ini_set('arg_separator.output', '&');
Tout ceci est bien expliqué ici :
http://php.developpez.com/faq/?page=sessions#sessions_xhtmlvalide