如何从查询字符串中获取布尔值


How do I get a boolean from a querystring?

如何在查询字符串中发送true或false值,然后在php中使用它?我试着做如下操作,但即使两者都设置为false,它也会给我true。我将从htaccess文件中获取这些值。

<?php
$var = $_GET['a'];
$bar = $_GET['b'];
if ($var && $bar)
{
echo "True";
}else
{
echo "False";
}
echo '<a href=?a=false&b=false>Check</a>';
?>

它们都计算为True,因为您无法通过查询字符串发送正确的布尔值truefalse。字符串"true""false"在PHP中的计算结果均为TRUE。非此即彼:

if ($var == "true" && $bar == "true") {

或者从数据源发送01,而不是"true""false"

有关更多信息,请查看这个庞大的PHP真值表。PHP的类型强制——也就是说,它将任意变量转换为其他类型的变量的方法——很难预测,并且根据自己的逻辑进行操作。

也就是说,问题的querystring部分本质上不是PHP问题——没有通过GETPOST参数传递布尔值的规范方法。如果你仔细观察,你会发现每个网站都以自己的方式处理它——有些使用"true",有些使用1,还有一些使用TRUE

还有最后一种选择——JSON。尽管这对您的情况不太可能有帮助,但我与服务器交换数据的首选方法是将所有数据编码为一个JSON字符串。这有一些好处,比如让我可以对JSON对象中封装的变量类型进行细粒度控制,但它的缺点是不能用普通的HTML表单来完成。不过,如果你在做AJAX ey web应用程序,那就太好了。