我想拒绝当前页面和所选网址的字母和符号
我只想要数字
if(@$_GET['page'] == '$string') {
if (preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $string))
{
die("error : page url found letters and symbols");
}
}
例如xxx.com/index.php?page=&lt; ----我只想要数字
因为有些人放了字母和符号 像这样 xxx.com/index.php?page=ABCD xxx.com/index.php?page =!@#$我不希望这种情况发生,因为我想保护我的网站免受sql注入
如何拒绝所选网址中的字母和符号:index.php?page = ?
答案 0 :(得分:1)
始终使用preg_match
函数,因为is_numeric
会测试值是否为数字。它不一定必须是整数 - 它可以是十进制数字或科学记数法中的数字。
$pageNumber = $_GET['page'];
if(preg_match('/^[1-9][0-9]{0,10}$/',$pageNumber))
{
echo "Page is number";
}
else
{
echo "Page is not a number";
}
如果您使用$_GET
进行分页
/^[1-9][0-9]{0,10}$/
这将允许字符串长度在1到10位之间(即第一个数字加上0-10个其他数字)。您可以根据自己的需要随意调整花括号中的数字。如果你想要一个固定长度的字符串,那么你只需要在括号中指定一个数字。
答案 1 :(得分:0)
is_numeric()
将检查参数是否为数字(Docs)。像这样使用它:
if (!is_numeric($_GET['page'])) {
die('is not an integer');
}
答案 2 :(得分:0)
清理int值的最简单方法是将其强制转换为int(不要向用户显示错误):
$_GET['page'] = intval($_GET['page']);
但如果您确实需要检查并且确实需要使用正则表达式,请检查[^0-9]
之类的内容,它代表任何不能成为自然数字的字符。
如果没有正则表达式,您可以查看is_numeric()
。