php中[(下標)]符號不僅可以應用於陣列和物件,還可以應用於字串,如果不注意很容易出錯。
比如獲取乙個網路介面,正常情況下會返回乙個陣列結構的json,經過解析之後結果為:
array(
'content' => 'this is returned by inte***ce'
)
我們獲取到介面資料之後,通過以下語句來判斷content是否有值的話,就會有問題:
if (!empty($result['content']))
echo $result['content'];
因為但是如果伺服器異常,可能會返回下面的html字串:
service internal error
這種情況下,經過json_decode解析我們如果使用上面的語句,就會獲得乙個 < 字元,這是為什麼呢?
我們來看一下 php5.2.5 中 作用於字串的邏輯:
.......
case is_string:
if (z_type_p(dim) != is_long)
tmp = *dim;
zval_copy_ctor(&tmp);
convert_to_long(&tmp);
dim = &tmp;
}
switch (type)
if (result)
}
return;
}
break;
......
上面原始碼中:dim 表示下標;
首先,判斷是不是操作符中沒有下標,如果是就報錯。因為沒有下標的話,是要新增乙個字陣列,這對於字串來說肯定要出錯。
然後判斷下標是不是數字型的,請注意 1234 和 "1234" ,php都會認為是數字型。如果不是數字型別的,就會將下標轉換為數字型,這種轉換規則下,字串都會被轉換為0;
所以,上面那個例子中,訪問下標為 content 的資料時,就會返回下標為0的資料,也就是 < 字元。
所以,嚴謹地來說,訪問乙個陣列下標的時候,要首先判斷一下這個型別是不是陣列型別,才能保證萬無一失。
C 讀取字串
我們在使用鍵盤輸入字串的時候,輸入流對於字串的讀取有幾種不同的實現方式。cin cin 在讀取字串時使用空白 空格 製表符和換行符 來確定字串的結束位置,這說明cin在獲取字元陣列輸入時只能讀取乙個單詞。而讀取該單詞後,cin將該字串放到陣列中,並在結果自動新增空字元。so,在某些時候,我們需要使用...
讀取字串長度
c 關於讀取乙個字串長度 包括空格回車 自用 方法1 include include using namespace std intmain 方法2 include include include include include using namespace std intmain 方法3 inc...
PHP擷取字串
php 自帶幾種字串擷取函式,其中常用到的就是 substr 和 mb substr。前者在處理中文時,gbk 為 2 個長度單位,utf 為 3 個長度單位,後者指定編碼後,乙個中文即為 1 個長度單位。substr 不用說,有時會截 1 3 個中文或半個中文,當然顯示出來是亂碼了,相對來說 mb...