Сбой страницы из # в качестве GET-параметра - PullRequest
0 голосов
/ 08 марта 2019

Я использовал URL-параметры, чтобы сделать целевую страницу за поисковой формой более личной. Я чувствовал относительно пуленепробиваемые вещи вроде этого

$string = $_GET['city']
$res = preg_replace("/[^a-zA-Z0-9]/", "", $string);

пока я не попробовал что-то вроде? City = # в качестве значения, и вся моя страница потерпела крах, и я больше не уверен в этом.

Как можно пройти проверку без написания всего движка или хотя бы остановить сбой моей страницы с #?

Спасибо

1 Ответ

0 голосов
/ 08 марта 2019

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...