亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查詢字符串可以包含字符串以外的任何內容嗎?

查詢字符串可以包含字符串以外的任何內容嗎?

PHP
Helenr 2023-09-22 14:49:19
我正在工作中從事一個項目,并發現了以下代碼:$queryStringValue = $_GET['var'];if ( is_string($queryStringValue) ){    // Do something.}我的問題:調用 is_string() 來檢查查詢字符串值是否是字符串完全沒有必要嗎?根據定義,“查詢字符串”使我相信數據類型只能是字符串,從而使對 is_string() 的調用變得多余。我是對的嗎?或者有時可以在查詢字符串中傳遞不同的數據類型?感謝您的任何見解!
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

根據 PHP 手冊中“確定變量類型”下的外部源變量:

HTTP 是一種文本協議,大多數(如果不是全部)來自超全局數組的內容(例如 $_POST 和 $_GET)將保留為字符串。PHP 不會嘗試將值轉換為特定類型。

同樣,在手冊的常見問題解答:HTML 表單中的數組中,我們讀到了數組:

要將<form>結果作為數組發送到 PHP 腳本,您可以像這樣 命名<input>,<select>或元素:<textarea><input name="MyArray[]" /> ...

這將變成一個查詢字符串?MyArray[]=foo&MyArray[]=bar等,可用作$_GET['MyArray'][0]$_GET['MyArray'][1]。您還可以使用命名鍵;查詢?var[x]=one&var[y]=two將產生關聯數組$_GET['var] = ['x' => 'one', 'y' => 'two'];并將?var[x][]=deep成為$_GET['var']['x'] = ['deep']

此外,該手冊還$_GET注明了以下內容:

注意: GET 變量通過urldecode()?傳遞。

然后,查看簽名urldecode

urldecode?(?string?$str?)?:?string

換句話說,用于預處理$_GET值的函數接受一個字符串并返回一個字符串。顯然,當傳入一個數組時,它將應用于urldecode該數組的每個字符串值。(如果有人想找到負責生成 的 PHP 源代碼部分$_GET,請分享鏈接,將其包含在此處。)

請注意,空值(例如 in??foo&bar=1)不會導致[foo] NULL,而是導致 in?,[foo] string(0) ""換句話說,結果為零長度string。我們再次得到[bar] string(1) "1".?沒有將值類型轉換getpost整數、浮點數、布爾值或 null。

總之,接收到的可能數據類型$_GETstringand?array(字符串;或進一步的數組;最后的標量“葉子”是字符串)。當然,如果你在 PHP 代碼中顯式聲明$_GET['foo'] = nullor?$_GET['bar'] = 1,那么就會有整數和空值。上述內容適用于 PHP 從外部源解析的變量。


更新:雖然上述內容對于從查詢字符串解析的所有都是正確的,但對于PHP 從查詢字符串中提取的鍵來說情況有所不同。假設以下 URL:

test.php?101=foo&202=bar&dev=ops

現在,var_dump(array_keys($_GET))數字鍵會返回什么?整數,而不是字符串:

array(3)?{
????[0]?·?int(101)
????[1]?·?int(202)
????[2]?·?string(3)?"dev"}

這符合 PHP數組鍵的標準轉換:“包含有效十進制整數的字符串,除非數字前面有 + 號,否則將轉換為整數類型。?”。然而,以下關鍵轉換不會發生:“浮點數也轉換為整數,這意味著小數部分將被截斷?!?因為(如來自外部源的變量中所述):“[外部]變量名稱中的點和空格將轉換為下劃線?!?/em>


外部變量類型轉換:總結

  • 查詢字符串的將始終是strings或以字符串作為最終標量值的數組(數組的)。

  • 查詢字符串的將始終是strings,除了被轉換為整數的整數(無符號正數:3-3符號負數:) 。


查看完整回答
反對 回復 2023-09-22
?
達令說

TA貢獻1821條經驗 獲得超6個贊

查詢字符串本身是 a string,但其中的變量可以解析為stringor array

url.com?var=123=> var 是字符串

url.com?var[]=123&var[]=321=> var 是一個數組


查看完整回答
反對 回復 2023-09-22
  • 2 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號