Als "fragment" also als lokalen Link wird der Teil nach dem # interpretiert. Du mußt das Zeichen daher encodieren. PHP stellt dir dafür urlencode() und rawurlencode() zur Verfügung.
Gleiches gilt zB auch für das Fragezeichen und Ampersand, sowie weitere Sonderzeichen.
Regards
Thomas