欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解PHP intval()函數(shù)的實(shí)例用法

 更新時(shí)間:2023年07月27日 11:54:21   作者:士別三日wyx  
本篇文章主要給大家介紹php intval函數(shù)怎么用,那么intval()函數(shù)是PHP中的內(nèi)置函數(shù),它返回變量的整數(shù)值,文中通過代碼詳細(xì)介紹了PHP intval()函數(shù)的用法,需要的朋友可以參考下

intval() 函數(shù)可以獲取變量的「整數(shù)值」。常用于強(qiáng)制類型轉(zhuǎn)換。

語法

int intval( $var, $base )

參數(shù)

  • $var:需要轉(zhuǎn)換成 integer 的「變量」
  • $base:轉(zhuǎn)換所使用的「進(jìn)制」

返回值

返回值為 integer 類型,可能是 0 或 1 或 其他integer 值。

  • 0:失敗 或 空array 返回 0
  • 1:非空array 返回 1
  • 其他integer值:成功時(shí) 返回 $var 的 integer 值。

返回值的「最大值」取決于系統(tǒng)

  • 32 位系統(tǒng)(-2147483648 到 2147483647)
  • 64 位系統(tǒng)(-9223372036854775808到9223372036854775807)

一、進(jìn)制自動(dòng)轉(zhuǎn)換

第二個(gè)參數(shù) $base 允許為空。

當(dāng) base 為空時(shí),默認(rèn)值是 0,會(huì)根據(jù) $var 的格式來調(diào)整轉(zhuǎn)換的進(jìn)制。

  • 如果 $var 以 0 開頭,就使用 8進(jìn)制
  • 如果 $var 以0x開頭,就使用 16進(jìn)制
  • 否則,就使用 10進(jìn)制

實(shí)例:

# 10的 8進(jìn)制是12
var_dump(intval(012));
# 10的 16進(jìn)制是A
var_dump(intval(0xA));
# 10的 10進(jìn)制是10
var_dump(intval(10));

輸出:

int(10)
int(10)
int(10)

繞過思路:當(dāng)某個(gè)數(shù)字被過濾時(shí),可以使用它的 8進(jìn)制/16進(jìn)制來繞過。

二、轉(zhuǎn)換數(shù)組

intval() 轉(zhuǎn)換數(shù)組類型時(shí),不關(guān)心數(shù)組中的內(nèi)容,只判斷數(shù)組中有沒有元素。

  • 「空數(shù)組」返回 0
  • 「非空數(shù)組」返回 1

實(shí)例:

var_dump(intval(array()));
var_dump(intval(array(3,2)));

輸出:

int(0)
int(1)

如果傳入的 $var是數(shù)組中的某個(gè)值時(shí),則當(dāng)做變量來轉(zhuǎn)換,而不是當(dāng)做數(shù)組類型。

實(shí)例:

$arr1 = array(8,6);
var_dump(intval($arr1[0]));

輸出:

int(8)

繞過思路:對于弱比較(a==b),可以給a、b兩個(gè)參數(shù)傳入空數(shù)組,使弱比較為true。

三、轉(zhuǎn)換小數(shù)

intval() 轉(zhuǎn)換小數(shù)類型時(shí),只返回個(gè)位數(shù),不遵循四舍五入的原則。

實(shí)例:

var_dump(intval(12));
var_dump(intval(1.2));
var_dump(intval(1.9));

輸出:

int(12)
int(1)
int(1)

繞過思路:當(dāng)某個(gè)數(shù)字被過濾時(shí),可以給它增加小數(shù)位來繞過。

四、轉(zhuǎn)換字符串

intval() 轉(zhuǎn)換字符串類型時(shí),會(huì)判斷字符串是否以數(shù)字開頭

  • 如果以數(shù)字開頭,就返回1個(gè)或多個(gè)連續(xù)的數(shù)字
  • 如果以字母開頭,就返回0

單雙引號對轉(zhuǎn)換結(jié)果沒有影響,并且 0 或 0x 開頭也只會(huì)當(dāng)做普通字符串處理。

實(shí)例:

var_dump(intval('12abc'));
var_dump(intval("12abc"));
var_dump(intval('abc123'));
var_dump(intval('1a2b3c'));
var_dump(intval('0101'));
var_dump(intval("0x2b"));

輸出:

int(12)
int(12)
int(0)
int(1)
int(101)
int(0)

五、取反~

intval() 函數(shù)支持一些特殊符號的,比如~取反。

實(shí)例:

var_dump(intval(~10));
var_dump(intval(~~10));

輸出:

int(-11)
int(10)

繞過思路:當(dāng)某個(gè)數(shù)字被過濾時(shí),可以兩次取反來繞過。

六、算數(shù)運(yùn)算符

intval() 函數(shù)支持算數(shù)運(yùn)算符,如果傳入的 $var參數(shù)包含算數(shù)運(yùn)算符,會(huì)先運(yùn)算,再對運(yùn)算結(jié)果進(jìn)行轉(zhuǎn)換。

實(shí)例:

var_dump(intval(5*5));
var_dump(intval(5+5));
var_dump(intval(05+5));

輸出:

int(25)
int(10)
int(10)

繞過思路:當(dāng)某個(gè)數(shù)字被過濾時(shí),可以使用算數(shù)運(yùn)算符繞過。

七、浮點(diǎn)數(shù)精度缺失問題

由于PHP中的浮點(diǎn)數(shù)是「弱類型」,存在「精度丟失」的問題,在轉(zhuǎn)換時(shí)可能會(huì)出現(xiàn)意料之外的情況。

比如下面這個(gè)案例,第一個(gè)輸出34正常,第二個(gè)以為會(huì)輸出58,結(jié)果輸出了57。

實(shí)例:

var_dump(intval(0.34*100.0));
var_dump(intval(0.58*100.0));

輸出:

int(34)
int(57)

八、intval()繞過思路

最后匯總一下intval()函數(shù)漏洞的繞過思路:

1)當(dāng)某個(gè)數(shù)字被過濾時(shí),可以使用它的 8進(jìn)制/16進(jìn)制來繞過;比如過濾10,就用012(八進(jìn)制)或0xA(十六進(jìn)制)。
2)對于弱比較(a==b),可以給a、b兩個(gè)參數(shù)傳入空數(shù)組,使弱比較為true。
3)當(dāng)某個(gè)數(shù)字被過濾時(shí),可以給它增加小數(shù)位來繞過;比如過濾3,就用3.1。
4)當(dāng)某個(gè)數(shù)字被過濾時(shí),可以給它拼接字符串來繞過;比如過濾3,就用3ab。(GET請求的參數(shù)會(huì)自動(dòng)拼接單引號)
5)當(dāng)某個(gè)數(shù)字被過濾時(shí),可以兩次取反來繞過;比如過濾10,就用~~10。
6)當(dāng)某個(gè)數(shù)字被過濾時(shí),可以使用算數(shù)運(yùn)算符繞過;比如過濾10,就用 5+5 或 2*5。

以上就是詳解PHP intval()函數(shù)的實(shí)例用法的詳細(xì)內(nèi)容,更多關(guān)于PHP intval()函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論