Null以字符串“null”发送

我们最近移动了服务器,并注意到一些奇怪的问题。 我们注意到的主要问题是在php中执行空检查的任何变量都被解释为字符串。

例如

if($var == null){ //do something } 

已经进行的两项主要更改是:1。从HTTP服务器更改为HTTPS 2.从php版本5.3.14更改为5.3.13

请求是使用jQuery.ajax post调用发出的。

我的问题是,是否存在任何已知的问题/原因(例如上面的更改)以及可以采取哪些措施来解决问题(只需很少的更改)。

一如既往地感谢您的回复!

编辑:示例

JS / jQuery的

  var test = null; $.ajax({ url: 'functions.php', data: { action: 'testNullFunction', testVar:test }, type: 'post', success: function (output) { alert(output) }}) 

PHP的:

  if (isset($_POST['action']) && !empty($_POST['action'])) { $action = $_POST['action']; switch ($action) { case 'testNullFunction': if ($_POST['testVar']==null || is_null($_POST['testVar'])){ echo "its null"; } break; 

当你这样做时:

 $.ajax({ url: 'functions.php', data: { action: 'testNullFunction', testVar:test }, type: 'post', success: function (output) { alert(output) } }) 

您将data作为字符串发送,因此所有值也成为字符串。

当PHP收到它时,它仍然是一个字符串。 在这种情况下,PHP无法确定testVar是否包含null"null" – 类型信息丢失。


你可以发送:

 data: { action: 'testNullFunction', testVar: JSON.encode(test) } 

接收:

 $testVar = json_decode($_POST['testVar']) 

有点天真的答案,但尝试进行严格的类型检查。

 if($var === null){ //do something } 

或者也许使用is_null。

 if (is_null($var)){ //do something } 

如果你没有按照JSON的方式对数据进行编码,那么你的字段将作为字符串发送 – 这包括将null作为'null'发送,当然如果你评估if($myVar==null)$myVar包含'null'它不是真正的null。

您可能还想看看这个问题。