PHP变量看起来相同但不相等(我很困惑)

时间:2016-03-25 02:20:15

标签: php variables compare

好的,所以我剃了头,但如果我有头发,我就不需要剃刀,因为今晚我已经将它全部撕掉了。它已经过了凌晨3点,在00:30看起来像一个简单的解决方案已经远离它了。

请参阅下面的代码摘录..

$psusername = substr($list[$count],16);

if ($psusername == $psu_value){
$answer = "YES";
}
else {
$answer = "NO";
}

$psusername保存值“normann”,该值取自基于文本的文件(url.db)中的URL

$psu_value还包含从用户计算机上设置的cookie(或浏览器地址栏中的参数 - URL)中检索到的值“normann”。

但是,我确信您可以猜到我的问题,变量$answer在上面的测试中包含“NO”。

我所知道的所有PHP都是从谷歌搜索中找到的,你们在这里,所以我不是专家,这可能很明显。

也许这是一个小学生错误,但我无法弄清楚我做错了什么。我的假设是数据类型不同。最后,我想比较这两个变量,当它们包含相同的信息时(即normann = normann),它们会得到一个真实的结果。

因此,如果你非常聪明的人可以指出为什么两个变量回应看似相同的信息,但实际上是不同的,这对我来说是一个非常有用的课程,让我的用户非常高兴。

5 个答案:

答案 0 :(得分:1)

当你这样做时,他们会回应同样的事情:

echo gettype($psusername) . '\n' . gettype($psu_value);

答案 1 :(得分:0)

由于我无法查看数组$列表中存储的数据(以及索引$ count),因此我无法建议完全解决您的问题。 但我建议你在if语句之前插入这段代码:

var_dump($psusername);
var_dump($psu_value);

并看看为什么这两个变量不相同。 var_dump函数将输出存储在变量和类型(字符串,整数,数组ec ..)中的内容,因此您将找出if语句返回false的原因

答案 2 :(得分:0)

由于您的字符串中看起来有不可打印的字符,因此您可以在比较之前将其删除。这将删除字符集中无法打印的内容:

$psusername = preg_replace("/[[:^print:]]/", "", $psusername);

答案 3 :(得分:0)

0D 0A是一个新行。第一个是回车(CR)字符,第二个是新行(NL)字符。它们也称为\r\n

您可以使用trim()修剪它。

$psusername = trim($psusername);

或者如果它只发生在字符串的末尾,则rtrim()将完成这项工作:

$psusername = rtrim($psusername);

如果您使用file()从文件中获取值,则可以将FILE_IGNORE_NEW_LINES作为第二个参数传递,这将删除新行:

$contents = file('url.db', FILE_IGNORE_NEW_LINES);

答案 4 :(得分:0)

我只想感谢所有回复的人。在查看我的日志文件之后,我意识到HEX格式的输出是回车值导致变量不匹配,我提到的是能够使用以下代码解析(修剪)..

$psusername = preg_replace("/[^[:alnum:]]/u", '', $psusername);

我也知道创建配置文件和用户名的系统允许大写和小写值匹配,因此我采取了预防措施,将该功能构建到我的代码中,作为完整性的附加度量。

我很高兴地说,代码现在功能完善。

再次感谢您的回复和建议。