PHP обладает множеством функций, которые помогут вам избежать подобных проблем.
Когда вы создаете URL для отображения в браузере, он должен быть urlencoded .Если вы просто добавляете часть строки запроса к фиксированному URL, вы можете создать эту строку с помощью http_build_query .Например:
$querystring = [
'param1' = 123,
'param2' = 'hello with a #'
];
$QS_encoded = http_build_query($querystring);
echo '<a href="?'.$QS_encoded.'">My link</a>';
#
в URL обозначает другую часть URL, которая является хеш-частью.Это не будет частью вашего $_GET
суперглобала.
Если по какой-либо причине вы хотите вручную ввести URL-адрес со строкой запроса, содержащей #
, вам необходимо использовать закодированную версию %23
.например, http://php.net/manual-lookup.php?pattern=%23
На заметку.Вы не должны использовать регулярные выражения для фильтрации данных, как это.PHP еще раз имеет расширение для этого: filters .