Почему & — не валидно, а & валидно (в ссылках)?
Валидатор ругается на мои ссылки, причём некоторые из них, а не все: & did not start a character reference. (& probably should have been escaped as &.). Какого чёрта?
Для правильного вопроса надо знать половину ответа
А что тут непонятного? Амперсанд в HTML может встречаться только как служебный элемент, открывающий код символа. Валидатор обнаружил амперсанд, но допустимого кода после него не нашёл и предлагает заменить его на &
Это мне что теперь все ссылки выводимые в html нужно обрабатывать меняя & на & а потом браузер будет менять & на & чтобы перейти по ссылке, разве это не идиотизм в чистом виде?
Амперсанд внутри href тоже несёт служебную функцию - отделяет друг от друга передаваемые параметры. Если он используется внутри параметра или в имени папки или файла, то его надо заменять на %26.
HTML5 допускает использование амперсанда без преобразования в &, но если за ним идут алфавитно-цифровые символы, заканчивающиеся точкой с запятой (;), то может возникнуть ошибка когда браузер попытается трактовать такую строку как именованный символ.
Замена амперсанда не требуется только внутри