PHP接收前端傳值各類狀況整理

PHP接收前端傳值各類狀況整理

服務端代碼:

header('Access-Control-Allow-Origin:*');
var_dump($_POST);
exit;

狀況

1) 傳null

$.post('http://xxxxx.xx/index.php', {
    "test": null
}, function(data, status) {
    console.log(data);
});

結果:php

array(1) {
  ["test"]=>
  string(0) ""
}

2) 傳''

代碼:前端

$.post('http://xxxxx.xx/index.php', {
    "test": ''
}, function(data, status) {
    console.log(data);
});

結果:工具

array(1) {
  ["test"]=>
  string(0) ""
}

3) 傳'[]'

$.post('http://xxxxx.xx/index.php', {
    "test": '[]'
}, function(data, status) {
    console.log(data);
});

結果:post

array(1) {
  ["test"]=>
  string(2) "[]"
}

4) 傳[]

$.post('http://xxxxx.xx/index.php', {
    "test": []
}, function(data, status) {
    console.log(data);
});

結果:測試

array(0) {
}

5) 傳2個[]

$.post('http://xxxxx.xx/index.php', {
    "test": [],
    "test2": []
}, function(data, status) {
    console.log(data);
});

結果:code

array(0) {
}

6) 傳{}

$.post('http://xxxxx.xx/index.php', {
    "test": {}
}, function(data, status) {
    console.log(data);
});

結果:對象

array(0) {
}

7) 傳2個{}

$.post('http://xxxxx.xx/index.php', {
    "test": {},
    "test2": {}
}, function(data, status) {
    console.log(data);
});

結果:字符串

array(0) {
}

8) 傳1個{}加1個非空對象

$.post('http://xxxxx.xx/index.php', {
    "test": {},
    "test2": {"a": 1}
}, function(data, status) {
    console.log(data);
});

結果:string

array(1) {
  ["test2"]=>
  array(1) {
    ["a"]=>
    string(1) "1"
  }
}

9) 傳[{}]

$.post('http://xxxxx.xx/index.php', {
    "test": [{}]
}, function(data, status) {
    console.log(data);
});

結果:it

array(0) {
}

10) 傳[[{}]]

$.post('http://xxxxx.xx/index.php', {
    "test": [[{}]]
}, function(data, status) {
    console.log(data);
});

結果:

array(0) {
}

11) 傳'nil'

$.post('http://xxxxx.xx/index.php', {
    "test": 'nil'
}, function(data, status) {
    console.log(data);
});

結果:

array(1) {
  ["test"]=>
  string(3) "nil"
}

12) 傳0

$.post('http://xxxxx.xx/index.php', {
    "test": 0
}, function(data, status) {
    console.log(data);
});

結果:

array(1) {
  ["test"]=>
  string(1) "0"
}

13) 傳'null'

$.post('http://xxxxx.xx/index.php', {
    "test": 'null'
}, function(data, status) {
    console.log(data);
});

結果:

array(1) {
  ["test"]=>
  string(4) "null"
}

用抓包工具發現

  1. http請求裏面並不會發送"無效的"字段——[]和{},因此不是PHP丟棄了,而是沒收到;
  2. 當傳的值是js裏的null,會轉換成空字符串,http請求裏面是test=,因此PHP接收到的test是個空字符串;
  3. http協議不能表示值是什麼類型,因此PHP只能什麼都當作string

總結:

  1. PHP對於接收到的每個值,會轉換成字符串變量
  2. PHP對於接收到的,之全部會接收不到是由於被一系列規則過濾掉了

以上結論是在jQ和PHP7之下驗證的,其餘環境不必定保證正確,以後能夠試驗使用CURL發送數據試試。

TODO:

  • [ ] 用CURL發送POST測試
相關文章
相關標籤/搜索