不论什么类型 假如是数字,便前往数字,假如没有是数字便往归0
正在PHP顶用$_GET['id']的时分就能够这样来一个转换
...太佳了
PHP代码
$id= intval($_GET['id']);
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8); // 42
echo intval('42', 8); // 34
?>
intval最常用的是在程序中功滤入进数据库的变量,将其转换为整型,避免SQL注进攻打的发生
但是使用没有该的话则会止不到检讨的做用,下里便联合一个真例来阐明那个答题
海内某个CMS体系,经由ZEND加稀了,解稀后某白件代码如下:
$id = isset( $_GET['id'] ) ? $_GET['id'] : 0;
if ( intval( $id ) )
{
$sql = "SELECT url FROM ".$tablepre."feed WHERE id={$id} AND uploader='{$SESSION['uid']}'";
代码很简略,获与GET来的id用intval函数断定,假如是整型则带进数据库查询, 新网科技
,望似逻辑上出有什么答题,但实践上那段代码出有止就任何的check做用,为什么呢?瞅如下足原:
$var="20070601";
if (intval($var))
echo "it's safe";
echo '$var='.$var;
echo "
";
$var1="1 union select 1,1,1 from admin";
if (intval($var1))
echo "it's safe too";
echo '$var1='.$var1;
?>
运转以上足原能够望到,两个断定的成果皆是safe的,但实践上只要$var是平安的$var1变质后已经附带的有额定的SQL查询语句了,那么intval是如何判别的呢?这就须要瞅intval函数正在PHP中是如何完成的,代码如下:
PHP_FUNCTION(intval)
{
zval **num, **arg_base;
int base;
switch (ZEND_NUM_ARGS()) {
case 1:
if (zend_get_parameters_ex(1, &num) == FAILURE) {
WRONG_PARAM_COUNT;
}
base = 10;
break;
case 2:
if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(arg_base);
base = Z_LVAL_PP(arg_base);
break;
default:
WRONG_PARAM_COUNT;
}
RETVAL_ZVAL(*num, 1, 0);
convert_to_long_base(return_value, base);
}
intval函数只断定参数的第一个字符能否为整型,那样假如搁正在if中,只需知足变质第一个字符为整型,则前往值为ture, 400电话
,所以道用if来判别intval后的变质是没有平安的