У меня есть следующий url, где var_a всегда должен быть числом. Также я не знаю, сколько var_a будет:
HTTP://localhost/url.php var_a [] = 298 & var_a [] = 299
Как предотвратить получение ошибки, если пользователь пишет специальные символы в URL-адресе?
Я сделал это:
$data = preg_replace('/[^0-9\']/', '',$_GET['var_a']);
$data = str_replace("'", '', $data);
print_r ($data);// Array ( [0] => 298 [1] => 299 )
//This is ok, all number were printed
Но я все еще получаю сообщение об ошибке со специальными символами вроде #% &
например
HTTP://localhost/url.php var_a [] = 298 & var_a [] = # 299
print_r ($data);// Array ( [0] => 298 [1] => )
//299 was not printed!
Как я могу это исправить?
Насколько я могу судить, вы не можете исправить это, если пользователи вводят значения непосредственно в URL. Причина в том, что эти символы имеют особые значения в URLS: # представляет фрагмент данных,% представляет значения unicode, а & представляет новую переменную. Два варианта, которые вы можете использовать, - использовать, если он поступает из формы, - использовать значения $ _POST или использовать urlencode перед отправкой значений. Знак фунта (#), не работающий в PHP, содержит больше информации об использовании urlencode.