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

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

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

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

語法

int intval( $var, $base )

參數(shù)

  • $var:需要轉換成 integer 的「變量」
  • $base:轉換所使用的「進制」

返回值

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

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

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

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

一、進制自動轉換

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

當 base 為空時,默認值是 0,會根據(jù) $var 的格式來調整轉換的進制。

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

實例:

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

輸出:

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

繞過思路:當某個數(shù)字被過濾時,可以使用它的 8進制/16進制來繞過。

二、轉換數(shù)組

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

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

實例:

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

輸出:

int(0)
int(1)

如果傳入的 $var是數(shù)組中的某個值時,則當做變量來轉換,而不是當做數(shù)組類型。

實例:

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

輸出:

int(8)

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

三、轉換小數(shù)

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

實例:

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

輸出:

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

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

四、轉換字符串

intval() 轉換字符串類型時,會判斷字符串是否以數(shù)字開頭

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

單雙引號對轉換結果沒有影響,并且 0 或 0x 開頭也只會當做普通字符串處理。

實例:

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ù)支持一些特殊符號的,比如~取反。

實例:

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

輸出:

int(-11)
int(10)

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

六、算數(shù)運算符

intval() 函數(shù)支持算數(shù)運算符,如果傳入的 $var參數(shù)包含算數(shù)運算符,會先運算,再對運算結果進行轉換。

實例:

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

輸出:

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

繞過思路:當某個數(shù)字被過濾時,可以使用算數(shù)運算符繞過。

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

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

比如下面這個案例,第一個輸出34正常,第二個以為會輸出58,結果輸出了57。

實例:

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

輸出:

int(34)
int(57)

八、intval()繞過思路

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

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

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

相關文章

最新評論