С точки зрения спецификации, фрагмент может содержать следующие символы (я уже расширил производство):
fragment = *( ALPHA / DIGIT / "-" / "." / "_" / "~" / "%" HEXDIG HEXDIG / "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" / ":" / "@" / "/" / "?" )
Таким образом, фрагмент не долженсодержать равнину #
;он должен быть закодирован с помощью %23
.
Но возможно, что некоторые браузеры отображают его по-разному, так как последовательности октетов, закодированных в процентах, которые представляют действительные символы UTF-8, заменяются символами, которые они представляют.