adam lambert trespassing PHP STRING 陷阱原理說明

WBOY
發布: 2016-07-29 08:43:25
原創
1152 人瀏覽過

字串是一系列字元。
按字元存取和修改字串
可以透過使用方數組括號指定字串後所需字符的從零開始的偏移量來存取和修改字串中的字符,如$str[42]中。為此,可以將字串視為字元數組。
注意:出於相同的目的,也可以使用大括號存取字串,如 $str{42} 所示。但是,從 PHP 5.3.0 開始,此語法已被棄用。請改用方括號,例如 $str[42]。
警告
寫入超出範圍的偏移量會用空格填滿字串。非整數類型將轉換為整數。非法偏移類型會發出 E_NOTICE。負偏移量在寫入時發出 E_NOTICE,但讀取空字串。僅使用指定字串的第一個字元。分配空字串會分配 NUL 位元組。
以上都是php手冊中的原話。
需要注意的時候,我們訪問資料庫的時候都是使用方括號“[]”,字串作為一個也可以使用運算符“[]”進行存取但是,需要注意的一點就是,存取字串的時候,操作符「[]」中的內容會被轉換為int型別的。
eg: $str ='123456';
echo $str['php'];//結果是1,因為offset 'php'轉換為整數為0,既是存取字串的第一個字符。
var_dump(isset($str['php']));//結果是bool(true)原理同上。
所以,在我們使用isset判斷一個設定是否存在某個鍵的時候,應該先判斷是否存在某個鍵的時候,應該先判斷試下,傳送過來的資料是否是資料庫,然後再判斷是否存在指定的key
eg://如果需要判斷傳送過來的資料庫是否存在'php'這個key時候,比較安全的做法為:

複製程式碼程式碼如下:


function is_set($arr, $key){
if (is_array($arr) ) && isset($arr[$key])) {
//存在該值的邏輯
} else{
//$arr 不是資料庫或資料庫$arr 不存在key $key 的邏輯
}
}


如果上面的函數沒有加入is_array 的判斷,當輸入字串過來的時候,結果就不是我們預想的那樣了。
僅於此為記下來,以後也出現類似的問題。

以上就介紹了 Adam Lambert Trespassing PHP STRING 陷阱原理說明,包括 Adam Lambert Trespassing 方面的內容,希望對 PHP 教學有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板