Ответ 1
Глядя на RFC для URL, раздел 3.5, идентификатор фрагмента (который, я полагаю, вы ссылаетесь) определяется как
fragment = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@" unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
Интересно, что спецификация также говорит, что
"Символы слэш (" / ") и знак вопроса ("? ") могут представлять данные в идентификаторе фрагмента."
Итак, кажется, что реальные якоря, такие как
<a href="#name?a=1&b=2">
....
<a name="name?a=1&b=2">
должны быть законными и очень похожи на обычную строку запроса URL. (Быстрая проверка подтвердила, что они работают корректно, по крайней мере, в Chrome, firefox и т.д.). Поскольку это работает, я предполагаю, что вы можете использовать свой метод для URL-адресов, например
http://www.site.com/foo.html?real=1¶meters=2 # fake = 2 & parameters = 3
без проблем (например, переменная "parameters" в фрагменте не должна мешать тому, что в строке запроса)
Вы также можете использовать процентную кодировку, когда это необходимо... и есть много других символов, определенных в субграницах, которые могут быть использованы.
Примечание:
Также из спецификации:
"Компонент идентификатора фрагмента указывается знаком символа числа (" # ") и заканчивается в конце URI."
Итак, все после # является идентификатором фрагмента и не должно мешать параметрам GET.